From 3cb4363c5fe3e750c4e00ee33d457eaceaf51cb1 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Sun, 26 Feb 2012 18:18:02 +0000 Subject: [PATCH] [#1157] Add SQL / JDBC tracing capabilities in addition to logging - fixed broken ResultQuery.fetchMany() --- .../org/jooq/impl/AbstractResultQuery.java | 2 +- .../main/java/org/jooq/impl/CursorImpl.java | 26 ++++++++++++++++--- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java index fc4b9b7352..5d16044dfc 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractResultQuery.java @@ -163,7 +163,7 @@ abstract class AbstractResultQuery extends AbstractQuery imple for (;;) { FieldProvider fields = new MetaDataFieldProvider(ctx, ctx.resultSet().getMetaData()); - Cursor c = new CursorImpl(ctx, listener, fields); + Cursor c = new CursorImpl(ctx, listener, fields, true); results.add(c.fetch()); if (ctx.statement().getMoreResults()) { diff --git a/jOOQ/src/main/java/org/jooq/impl/CursorImpl.java b/jOOQ/src/main/java/org/jooq/impl/CursorImpl.java index 15cebf5d74..b5a3aac8f9 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CursorImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/CursorImpl.java @@ -83,17 +83,25 @@ class CursorImpl implements Cursor { private transient CursorResultSet rs; private transient Iterator iterator; - @SuppressWarnings("unchecked") CursorImpl(ExecuteContext ctx, ExecuteListener listener, FieldProvider fields) { - this(ctx, listener, fields, (Class) RecordImpl.class); + this(ctx, listener, fields, false); + } + + @SuppressWarnings("unchecked") + CursorImpl(ExecuteContext ctx, ExecuteListener listener, FieldProvider fields, boolean keepStatementOpen) { + this(ctx, listener, fields, (Class) RecordImpl.class, keepStatementOpen); } CursorImpl(ExecuteContext ctx, ExecuteListener listener, FieldProvider fields, Class type) { + this(ctx, listener, fields, type, false); + } + + CursorImpl(ExecuteContext ctx, ExecuteListener listener, FieldProvider fields, Class type, boolean keepStatementOpen) { this.ctx = ctx; this.listener = (listener != null ? listener : new ExecuteListeners(ctx)); this.fields = fields; this.type = type; - this.rs = new CursorResultSet(); + this.rs = new CursorResultSet(keepStatementOpen); } @Override @@ -225,6 +233,12 @@ class CursorImpl implements Cursor { */ private final class CursorResultSet implements ResultSet { + private final boolean keepStatementOpen; + + CursorResultSet(boolean keepStatementOpen) { + this.keepStatementOpen = keepStatementOpen; + } + @Override public final T unwrap(Class iface) throws SQLException { return ctx.resultSet().unwrap(iface); @@ -243,7 +257,11 @@ class CursorImpl implements Cursor { @Override public final void close() throws SQLException { ctx.resultSet().close(); - ctx.statement().close(); + + if (!keepStatementOpen) { + ctx.statement().close(); + } + listener.fetchEnd(ctx); }