From c4170850081e57767dd4cf2e7b742cac7bf5dec5 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 2 Sep 2014 10:04:18 +0200 Subject: [PATCH] [#3427] Internal QueryCollectorSignal exception escapes into user code when not dealt with in ExecuteListener --- jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java | 6 ++++++ jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java | 6 ++++++ jOOQ/src/main/java/org/jooq/impl/BatchMultiple.java | 6 ++++++ jOOQ/src/main/java/org/jooq/impl/BatchSingle.java | 8 +++++++- jOOQ/src/main/java/org/jooq/impl/CursorImpl.java | 6 ++++++ 5 files changed, 31 insertions(+), 1 deletion(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java index 222baeaba1..01cbd960ef 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractQuery.java @@ -69,6 +69,7 @@ import org.jooq.Query; import org.jooq.RenderContext; import org.jooq.conf.ParamType; import org.jooq.conf.StatementType; +import org.jooq.exception.ControlFlowSignal; import org.jooq.exception.DetachedException; import org.jooq.tools.JooqLogger; @@ -333,6 +334,11 @@ abstract class AbstractQuery extends AbstractQueryPart implements Query, Attacha result = execute(ctx, listener); return result; } + + // [#3427] ControlFlowSignals must not be passed on to ExecuteListners + catch (ControlFlowSignal e) { + throw e; + } catch (RuntimeException e) { ctx.exception(e); listener.exception(ctx); diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java b/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java index 5be2e3d93f..1e9dc4ab22 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java @@ -86,6 +86,7 @@ import org.jooq.Routine; import org.jooq.Schema; import org.jooq.UDTField; import org.jooq.UDTRecord; +import org.jooq.exception.ControlFlowSignal; import org.jooq.tools.Convert; /** @@ -310,6 +311,11 @@ public abstract class AbstractRoutine extends AbstractQueryPart implements Ro fetchOutParameters(ctx); return 0; } + + // [#3427] ControlFlowSignals must not be passed on to ExecuteListners + catch (ControlFlowSignal e) { + throw e; + } catch (RuntimeException e) { ctx.exception(e); listener.exception(ctx); diff --git a/jOOQ/src/main/java/org/jooq/impl/BatchMultiple.java b/jOOQ/src/main/java/org/jooq/impl/BatchMultiple.java index 3a0a37fcb2..01ef6ad68f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/BatchMultiple.java +++ b/jOOQ/src/main/java/org/jooq/impl/BatchMultiple.java @@ -50,6 +50,7 @@ import org.jooq.Configuration; import org.jooq.ExecuteContext; import org.jooq.ExecuteListener; import org.jooq.Query; +import org.jooq.exception.ControlFlowSignal; /** * @author Lukas Eder @@ -113,6 +114,11 @@ class BatchMultiple implements Batch { consumeWarnings(ctx, listener); } } + + // [#3427] ControlFlowSignals must not be passed on to ExecuteListners + catch (ControlFlowSignal e) { + throw e; + } catch (RuntimeException e) { ctx.exception(e); listener.exception(ctx); diff --git a/jOOQ/src/main/java/org/jooq/impl/BatchSingle.java b/jOOQ/src/main/java/org/jooq/impl/BatchSingle.java index bdb8ae38f1..c5713faad2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/BatchSingle.java +++ b/jOOQ/src/main/java/org/jooq/impl/BatchSingle.java @@ -43,8 +43,8 @@ package org.jooq.impl; import static org.jooq.conf.ParamType.INLINED; import static org.jooq.conf.SettingsTools.executeStaticStatements; import static org.jooq.impl.Utils.consumeWarnings; -import static org.jooq.impl.Utils.fields; import static org.jooq.impl.Utils.dataTypes; +import static org.jooq.impl.Utils.fields; import static org.jooq.impl.Utils.visitAll; import java.sql.Connection; @@ -60,6 +60,7 @@ import org.jooq.ExecuteContext; import org.jooq.ExecuteListener; import org.jooq.Field; import org.jooq.Query; +import org.jooq.exception.ControlFlowSignal; /** * @author Lukas Eder @@ -166,6 +167,11 @@ class BatchSingle implements BatchBindStep { consumeWarnings(ctx, listener); } } + + // [#3427] ControlFlowSignals must not be passed on to ExecuteListners + catch (ControlFlowSignal e) { + throw e; + } catch (RuntimeException e) { ctx.exception(e); listener.exception(ctx); diff --git a/jOOQ/src/main/java/org/jooq/impl/CursorImpl.java b/jOOQ/src/main/java/org/jooq/impl/CursorImpl.java index 8ef6462819..8851136434 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CursorImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/CursorImpl.java @@ -79,6 +79,7 @@ import org.jooq.RecordType; import org.jooq.Result; import org.jooq.Row; import org.jooq.Table; +import org.jooq.exception.ControlFlowSignal; import org.jooq.tools.JooqLogger; import org.jooq.tools.jdbc.JDBC41ResultSet; import org.jooq.tools.jdbc.JDBCUtils; @@ -1414,6 +1415,11 @@ class CursorImpl implements Cursor { rows++; } } + + // [#3427] ControlFlowSignals must not be passed on to ExecuteListners + catch (ControlFlowSignal e) { + throw e; + } catch (RuntimeException e) { ctx.exception(e); listener.exception(ctx);