[jOOQ/jOOQ#8968] An exception in ExecuteListener#start is not routed to ExecuteListener#exception
This commit is contained in:
parent
4af8828cea
commit
0617c77c36
@ -1073,7 +1073,7 @@ abstract class AbstractDMLQuery<R extends Record> extends AbstractRowCountQuery
|
||||
}
|
||||
|
||||
ExecuteContext ctx2 = new DefaultExecuteContext(((DefaultExecuteContext) ctx).originalConfiguration());
|
||||
ExecuteListener listener2 = ExecuteListeners.get(ctx2);
|
||||
ExecuteListener listener2 = ExecuteListeners.getAndStart(ctx2);
|
||||
|
||||
ctx2.resultSet(rs);
|
||||
returnedResult = new CursorImpl<>(ctx2, listener2, returningResolvedAsterisks.toArray(EMPTY_FIELD), null, false, true).fetch();
|
||||
|
||||
@ -305,6 +305,9 @@ abstract class AbstractQuery extends AbstractQueryPart implements Query {
|
||||
int result = 0;
|
||||
try {
|
||||
|
||||
// [#8968] Keep start() event inside of lifecycle management
|
||||
listener.start(ctx);
|
||||
|
||||
// [#385] If a statement was previously kept open
|
||||
if (keepStatement() && statement != null) {
|
||||
ctx.sql(rendered.sql);
|
||||
|
||||
@ -480,6 +480,9 @@ public abstract class AbstractRoutine<T> extends AbstractNamed implements Routin
|
||||
ExecuteListener listener = ExecuteListeners.get(ctx);
|
||||
|
||||
try {
|
||||
// [#8968] Keep start() event inside of lifecycle management
|
||||
listener.start(ctx);
|
||||
|
||||
Connection connection = ctx.connection();
|
||||
|
||||
listener.renderStart(ctx);
|
||||
|
||||
@ -82,6 +82,10 @@ final class BatchMultiple implements Batch {
|
||||
Connection connection = ctx.connection();
|
||||
|
||||
try {
|
||||
|
||||
// [#8968] Keep start() event inside of lifecycle management
|
||||
listener.start(ctx);
|
||||
|
||||
ctx.statement(new SettingsEnabledPreparedStatement(connection));
|
||||
|
||||
String[] batchSQL = ctx.batchSQL();
|
||||
|
||||
@ -205,6 +205,9 @@ final class BatchSingle implements BatchBindStep {
|
||||
DataType<?>[] paramTypes = dataTypes(params);
|
||||
|
||||
try {
|
||||
// [#8968] Keep start() event inside of lifecycle management
|
||||
listener.start(ctx);
|
||||
|
||||
listener.renderStart(ctx);
|
||||
// [#1520] TODO: Should the number of bind values be checked, here?
|
||||
ctx.sql(create.render(query));
|
||||
|
||||
@ -131,7 +131,7 @@ final class CursorImpl<R extends Record> extends AbstractCursor<R> implements Cu
|
||||
super(ctx.configuration(), new Fields<>(fields));
|
||||
|
||||
this.ctx = ctx;
|
||||
this.listener = (listener != null ? listener : ExecuteListeners.get(ctx));
|
||||
this.listener = (listener != null ? listener : ExecuteListeners.getAndStart(ctx));
|
||||
this.factory = recordFactory(type, fields);
|
||||
this.keepStatement = keepStatement;
|
||||
this.keepResultSet = keepResultSet;
|
||||
|
||||
@ -1330,7 +1330,7 @@ public class DefaultDSLContext extends AbstractScope implements DSLContext, Seri
|
||||
@Override
|
||||
public Cursor<Record> fetchLazy(ResultSet rs, Field<?>... fields) {
|
||||
ExecuteContext ctx = new DefaultExecuteContext(configuration());
|
||||
ExecuteListener listener = ExecuteListeners.get(ctx);
|
||||
ExecuteListener listener = ExecuteListeners.getAndStart(ctx);
|
||||
|
||||
ctx.resultSet(rs);
|
||||
return new CursorImpl<>(ctx, listener, fields, null, false, true);
|
||||
|
||||
@ -75,13 +75,28 @@ final class ExecuteListeners implements ExecuteListener {
|
||||
private boolean resultStart;
|
||||
private boolean fetchEnd;
|
||||
|
||||
/**
|
||||
* Initialise the provided {@link ExecuteListener} set and return a wrapper.
|
||||
*/
|
||||
static ExecuteListener get(ExecuteContext ctx) {
|
||||
ExecuteListener[][] listeners = listeners(ctx);
|
||||
|
||||
if (listeners == null)
|
||||
return EMPTY_LISTENER;
|
||||
else
|
||||
return new ExecuteListeners(ctx, listeners);
|
||||
return new ExecuteListeners(listeners);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialise the provided {@link ExecuteListener} set and return a wrapper.
|
||||
* <p>
|
||||
* Call this if the {@link ExecuteListener#start(ExecuteContext)} event
|
||||
* should be triggered eagerly.
|
||||
*/
|
||||
static ExecuteListener getAndStart(ExecuteContext ctx) {
|
||||
ExecuteListener result = get(ctx);
|
||||
result.start(ctx);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -128,10 +143,8 @@ final class ExecuteListeners implements ExecuteListener {
|
||||
return result == null ? new ArrayList<>() : result;
|
||||
}
|
||||
|
||||
private ExecuteListeners(ExecuteContext ctx, ExecuteListener[][] listeners) {
|
||||
private ExecuteListeners(ExecuteListener[][] listeners) {
|
||||
this.listeners = listeners;
|
||||
|
||||
start(ctx);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Loading…
Reference in New Issue
Block a user