From debdd1ffe04ff4379b26dbd04e61a0dbcb2ea988 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 28 Mar 2024 15:42:56 +0100 Subject: [PATCH] [jOOQ/jOOQ#15732] Reverse engineer error message to detect SQLStateClass --- .../org/jooq/exception/DataAccessException.java | 16 ++++++++++++++-- .../java/org/jooq/exception/DataException.java | 10 +++++++++- .../IntegrityConstraintViolationException.java | 8 +++++++- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/exception/DataAccessException.java b/jOOQ/src/main/java/org/jooq/exception/DataAccessException.java index 38cce0291b..27ab1d85f7 100644 --- a/jOOQ/src/main/java/org/jooq/exception/DataAccessException.java +++ b/jOOQ/src/main/java/org/jooq/exception/DataAccessException.java @@ -76,7 +76,8 @@ import io.r2dbc.spi.R2dbcException; */ public class DataAccessException extends RuntimeException { - SQLStateClass sqlStateClass; + SQLStateClass sqlStateClass; + SQLStateSubclass sqlStateSubclass; /** * Constructor for DataAccessException. @@ -196,6 +197,14 @@ public class DataAccessException extends RuntimeException { return SQLStateClass.NONE; } + /** + * Set the {@link SQLStateSubclass}. + */ + public DataAccessException sqlStateSubclass(SQLStateSubclass c) { + this.sqlStateSubclass = c; + return this; + } + /** * Decode the {@link SQLException#getSQLState()} or * {@link R2dbcException#getSqlState()} from {@link #getCause()} into @@ -204,7 +213,10 @@ public class DataAccessException extends RuntimeException { */ @NotNull public SQLStateSubclass sqlStateSubclass() { - return SQLStateSubclass.fromCode(sqlState()); + if (sqlStateSubclass != null) + return sqlStateSubclass; + else + return SQLStateSubclass.fromCode(sqlState()); } @Override diff --git a/jOOQ/src/main/java/org/jooq/exception/DataException.java b/jOOQ/src/main/java/org/jooq/exception/DataException.java index 8fe9598bb6..18da92dae3 100644 --- a/jOOQ/src/main/java/org/jooq/exception/DataException.java +++ b/jOOQ/src/main/java/org/jooq/exception/DataException.java @@ -38,6 +38,9 @@ package org.jooq.exception; import static org.jooq.exception.SQLStateClass.C22_DATA_EXCEPTION; +import static org.jooq.exception.SQLStateClass.C23_INTEGRITY_CONSTRAINT_VIOLATION; +import static org.jooq.exception.SQLStateSubclass.C22000_NO_SUBCLASS; +import static org.jooq.exception.SQLStateSubclass.C23000_NO_SUBCLASS; import java.sql.SQLDataException; import java.sql.SQLException; @@ -64,7 +67,7 @@ public class DataException extends DataAccessException { public DataException(String message) { super(message); - sqlStateClass(C22_DATA_EXCEPTION); + init(); } /** @@ -77,6 +80,11 @@ public class DataException extends DataAccessException { public DataException(String message, Throwable cause) { super(message, cause); + init(); + } + + private final void init() { sqlStateClass(C22_DATA_EXCEPTION); + sqlStateSubclass(C22000_NO_SUBCLASS); } } diff --git a/jOOQ/src/main/java/org/jooq/exception/IntegrityConstraintViolationException.java b/jOOQ/src/main/java/org/jooq/exception/IntegrityConstraintViolationException.java index d3a0a89a70..bbc7ef9f98 100644 --- a/jOOQ/src/main/java/org/jooq/exception/IntegrityConstraintViolationException.java +++ b/jOOQ/src/main/java/org/jooq/exception/IntegrityConstraintViolationException.java @@ -38,6 +38,7 @@ package org.jooq.exception; import static org.jooq.exception.SQLStateClass.C23_INTEGRITY_CONSTRAINT_VIOLATION; +import static org.jooq.exception.SQLStateSubclass.C23000_NO_SUBCLASS; import java.sql.SQLIntegrityConstraintViolationException; @@ -62,7 +63,7 @@ public class IntegrityConstraintViolationException extends DataAccessException { public IntegrityConstraintViolationException(String message) { super(message); - sqlStateClass(C23_INTEGRITY_CONSTRAINT_VIOLATION); + init(); } /** @@ -75,6 +76,11 @@ public class IntegrityConstraintViolationException extends DataAccessException { public IntegrityConstraintViolationException(String message, Throwable cause) { super(message, cause); + init(); + } + + private final void init() { sqlStateClass(C23_INTEGRITY_CONSTRAINT_VIOLATION); + sqlStateSubclass(C23000_NO_SUBCLASS); } }