From 45d22cfbed24ad5e3faf31ec0f2ca749e869ad86 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 2 Jul 2019 14:19:57 +0200 Subject: [PATCH] [jOOQ/jOOQ#8877] fetchSingle() failure does not trigger ExecuteListener#exception() event --- jOOQ/src/main/java/org/jooq/impl/CursorImpl.java | 4 ++-- jOOQ/src/main/java/org/jooq/impl/Tools.java | 14 +++++++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/CursorImpl.java b/jOOQ/src/main/java/org/jooq/impl/CursorImpl.java index df5a30bd77..6087ea9c61 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CursorImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/CursorImpl.java @@ -99,8 +99,8 @@ final class CursorImpl extends AbstractCursor implements Cu private static final JooqLogger log = JooqLogger.getLogger(CursorImpl.class); - private final ExecuteContext ctx; - private final ExecuteListener listener; + final ExecuteContext ctx; + final ExecuteListener listener; private final boolean[] intern; private final boolean keepResultSet; private final boolean keepStatement; diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index b9db48c757..766f46b7e0 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -2058,7 +2058,7 @@ final class Tools { else if (size == 1) return result.get(0); else - throw new TooManyRowsException("Cursor returned more than one result"); + throw exception((CursorImpl) cursor, new TooManyRowsException("Cursor returned more than one result")); } finally { cursor.close(); @@ -2106,17 +2106,25 @@ final class Tools { int size = result.size(); if (size == 0) - throw new NoDataFoundException("Cursor returned no rows"); + throw exception((CursorImpl) cursor, new NoDataFoundException("Cursor returned no rows")); else if (size == 1) return result.get(0); else - throw new TooManyRowsException("Cursor returned more than one result"); + throw exception((CursorImpl) cursor, new TooManyRowsException("Cursor returned more than one result")); } finally { cursor.close(); } } + private static final RuntimeException exception(CursorImpl cursor, RuntimeException e) { + + // [#8877] Make sure these exceptions pass through ExecuteListeners as well + cursor.ctx.exception(e); + cursor.listener.exception(cursor.ctx); + return cursor.ctx.exception(); + } + /** * Visit each query part from a collection, given a context. */