From 6801b1a365f4a1108e539589c2a6d1921c71347d Mon Sep 17 00:00:00 2001 From: Dennis Melzer Date: Tue, 25 Mar 2025 08:35:18 +0100 Subject: [PATCH 1/2] Use proper default exception translator if no dbName is available This commit updates jOOQ's DefaultExceptionTranslatorExecuteListener to fallback on Spring Framework's default if no dbName is available. See gh-44954 Signed-off-by: Dennis Melzer --- .../DefaultExceptionTranslatorExecuteListener.java | 2 +- ...DefaultExceptionTranslatorExecuteListenerTests.java | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jooq/DefaultExceptionTranslatorExecuteListener.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jooq/DefaultExceptionTranslatorExecuteListener.java index 199a62dda0e..d4681ff4203 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jooq/DefaultExceptionTranslatorExecuteListener.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jooq/DefaultExceptionTranslatorExecuteListener.java @@ -114,7 +114,7 @@ final class DefaultExceptionTranslatorExecuteListener implements ExceptionTransl private SQLExceptionTranslator apply(SQLDialect dialect) { String dbName = getSpringDbName(dialect); return (dbName != null) ? new SQLErrorCodeSQLExceptionTranslator(dbName) - : new SQLStateSQLExceptionTranslator(); + : new SQLErrorCodeSQLExceptionTranslator(); } private String getSpringDbName(SQLDialect dialect) { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jooq/DefaultExceptionTranslatorExecuteListenerTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jooq/DefaultExceptionTranslatorExecuteListenerTests.java index ae1278889d1..60c2113eca2 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jooq/DefaultExceptionTranslatorExecuteListenerTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jooq/DefaultExceptionTranslatorExecuteListenerTests.java @@ -17,6 +17,7 @@ package org.springframework.boot.autoconfigure.jooq; import java.sql.SQLException; +import java.sql.SQLSyntaxErrorException; import java.util.function.Function; import org.jooq.Configuration; @@ -94,11 +95,18 @@ class DefaultExceptionTranslatorExecuteListenerTests { static Object[] exceptionTranslatesSqlExceptions() { return new Object[] { new Object[] { SQLDialect.DERBY, sqlException("42802") }, new Object[] { SQLDialect.H2, sqlException(42000) }, + new Object[] { SQLDialect.H2, new SQLSyntaxErrorException() }, new Object[] { SQLDialect.HSQLDB, sqlException(-22) }, + new Object[] { SQLDialect.HSQLDB, new SQLSyntaxErrorException() }, new Object[] { SQLDialect.MARIADB, sqlException(1054) }, + new Object[] { SQLDialect.MARIADB, new SQLSyntaxErrorException() }, new Object[] { SQLDialect.MYSQL, sqlException(1054) }, + new Object[] { SQLDialect.MYSQL, new SQLSyntaxErrorException() }, new Object[] { SQLDialect.POSTGRES, sqlException("03000") }, - new Object[] { SQLDialect.SQLITE, sqlException("21000") } }; + new Object[] { SQLDialect.POSTGRES, new SQLSyntaxErrorException() }, + new Object[] { SQLDialect.SQLITE, new SQLSyntaxErrorException() }, + new Object[] { SQLDialect.SQLITE, sqlException("21000") }, + }; } private static SQLException sqlException(String sqlState) { From cd31127ac0b579604fa237e6ecbae536bb12a180 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Nicoll?= Date: Thu, 17 Apr 2025 10:09:54 +0200 Subject: [PATCH 2/2] Polish contribution See gh-44954 --- .../jooq/DefaultExceptionTranslatorExecuteListener.java | 6 +++--- .../DefaultExceptionTranslatorExecuteListenerTests.java | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jooq/DefaultExceptionTranslatorExecuteListener.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jooq/DefaultExceptionTranslatorExecuteListener.java index d4681ff4203..c4442b56dd6 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jooq/DefaultExceptionTranslatorExecuteListener.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/jooq/DefaultExceptionTranslatorExecuteListener.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,8 +26,8 @@ import org.jooq.SQLDialect; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator; +import org.springframework.jdbc.support.SQLExceptionSubclassTranslator; import org.springframework.jdbc.support.SQLExceptionTranslator; -import org.springframework.jdbc.support.SQLStateSQLExceptionTranslator; import org.springframework.util.Assert; /** @@ -114,7 +114,7 @@ final class DefaultExceptionTranslatorExecuteListener implements ExceptionTransl private SQLExceptionTranslator apply(SQLDialect dialect) { String dbName = getSpringDbName(dialect); return (dbName != null) ? new SQLErrorCodeSQLExceptionTranslator(dbName) - : new SQLErrorCodeSQLExceptionTranslator(); + : new SQLExceptionSubclassTranslator(); } private String getSpringDbName(SQLDialect dialect) { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jooq/DefaultExceptionTranslatorExecuteListenerTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jooq/DefaultExceptionTranslatorExecuteListenerTests.java index 60c2113eca2..d3ebb228e45 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jooq/DefaultExceptionTranslatorExecuteListenerTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/jooq/DefaultExceptionTranslatorExecuteListenerTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2024 the original author or authors. + * Copyright 2012-2025 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -94,6 +94,7 @@ class DefaultExceptionTranslatorExecuteListenerTests { static Object[] exceptionTranslatesSqlExceptions() { return new Object[] { new Object[] { SQLDialect.DERBY, sqlException("42802") }, + new Object[] { SQLDialect.DERBY, new SQLSyntaxErrorException() }, new Object[] { SQLDialect.H2, sqlException(42000) }, new Object[] { SQLDialect.H2, new SQLSyntaxErrorException() }, new Object[] { SQLDialect.HSQLDB, sqlException(-22) }, @@ -104,9 +105,8 @@ class DefaultExceptionTranslatorExecuteListenerTests { new Object[] { SQLDialect.MYSQL, new SQLSyntaxErrorException() }, new Object[] { SQLDialect.POSTGRES, sqlException("03000") }, new Object[] { SQLDialect.POSTGRES, new SQLSyntaxErrorException() }, - new Object[] { SQLDialect.SQLITE, new SQLSyntaxErrorException() }, new Object[] { SQLDialect.SQLITE, sqlException("21000") }, - }; + new Object[] { SQLDialect.SQLITE, new SQLSyntaxErrorException() } }; } private static SQLException sqlException(String sqlState) {