From d3c1229d4d0e9451eb8427aa2af9cd663cc38c7a Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 26 Jan 2021 09:48:37 +0100 Subject: [PATCH] [jOOQ/jOOQ#11304] ExecuteContext.exception() should accept null exceptions and translate them to an unspecified DataAccessException --- jOOQ/src/main/java/org/jooq/ExecuteContext.java | 3 +++ .../main/java/org/jooq/impl/DefaultExecuteContext.java | 6 +++--- jOOQ/src/main/java/org/jooq/impl/Tools.java | 10 ++++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/ExecuteContext.java b/jOOQ/src/main/java/org/jooq/ExecuteContext.java index 495e4347d6..c096e84d95 100644 --- a/jOOQ/src/main/java/org/jooq/ExecuteContext.java +++ b/jOOQ/src/main/java/org/jooq/ExecuteContext.java @@ -291,6 +291,9 @@ public interface ExecuteContext extends Scope { * Override the {@link RuntimeException} being thrown. *

* This may have no effect, if called at the wrong moment. + *

+ * If null is being passed, jOOQ will internally translate the + * "unavailable" exception to an unspecified {@link DataAccessException}. */ void exception(RuntimeException e); diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java index fcd8ea783f..7bde7789e6 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultExecuteContext.java @@ -665,21 +665,21 @@ class DefaultExecuteContext implements ExecuteContext { @Override public final void exception(RuntimeException e) { - this.exception = e; + this.exception = Tools.translate(sql(), e); if (Boolean.TRUE.equals(settings().isDebugInfoOnStackTrace())) { // [#5570] Add jOOQ version and SQL Dialect info on the stack trace // to help users write better bug reports. // See http://stackoverflow.com/q/39712695/521799 - StackTraceElement[] oldStack = e.getStackTrace(); + StackTraceElement[] oldStack = exception.getStackTrace(); if (oldStack != null) { StackTraceElement[] newStack = new StackTraceElement[oldStack.length + 1]; System.arraycopy(oldStack, 0, newStack, 1, oldStack.length); newStack[0] = new StackTraceElement( "org.jooq_" + Constants.VERSION + "." + dialect(), "debug", null, -1); - e.setStackTrace(newStack); + exception.setStackTrace(newStack); } } } diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index 3be5739c55..e6019251d2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -2802,6 +2802,16 @@ final class Tools { return new DataAccessException("SQL [" + sql + "]; Unspecified SQLException"); } + /** + * Translate a {@link RuntimeException} to a {@link DataAccessException} + */ + static final RuntimeException translate(String sql, RuntimeException e) { + if (e != null) + return e; + else + return new DataAccessException("SQL [" + sql + "]; Unspecified RuntimeException"); + } + /** * Safely close a statement */