From 3648e2fc503fffa6e4e19375d0bbd17d857cf60d Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Fri, 5 Apr 2013 10:16:00 +0200 Subject: [PATCH] [#2373] Cursor.close() doesn't terminate the ExecuteListener life cycle - Cursor should always be closed --- .../src/org/jooq/test/jOOQAbstractTest.java | 2 ++ jOOQ/src/main/java/org/jooq/impl/Utils.java | 22 +++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java index aca1352875..e85705417c 100644 --- a/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java +++ b/jOOQ-test/src/org/jooq/test/jOOQAbstractTest.java @@ -471,6 +471,8 @@ public abstract class jOOQAbstractTest< m.toString().replace("public void ", "").replaceAll("( throws.*)?", ""))); } } + + log.info("Unbalanced test: ", LifecycleWatcherListener.START_COUNT.size()); } @SuppressWarnings("unused") diff --git a/jOOQ/src/main/java/org/jooq/impl/Utils.java b/jOOQ/src/main/java/org/jooq/impl/Utils.java index e1265cd80f..b830fdf364 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Utils.java +++ b/jOOQ/src/main/java/org/jooq/impl/Utils.java @@ -693,7 +693,10 @@ final class Utils { /** * Get the only element from a cursor or null, or throw an - * exception + * exception. + *

+ * [#2373] This method will always close the argument cursor, as it is + * supposed to be completely consumed by this method. * * @param cursor The cursor * @return The only element from the cursor or null @@ -701,13 +704,18 @@ final class Utils { * element */ static final R fetchOne(Cursor cursor) throws InvalidResultException { - R record = cursor.fetchOne(); - - if (cursor.hasNext()) { - throw new InvalidResultException("Cursor returned more than one result"); + try { + R record = cursor.fetchOne(); + + if (cursor.hasNext()) { + throw new InvalidResultException("Cursor returned more than one result"); + } + + return record; + } + finally { + cursor.close(); } - - return record; } /**