Merge branch '2.4.x'

Closes gh-25718
pull/25721/head
Andy Wilkinson 4 years ago
commit 7ef9ca02c1

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2019 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -80,10 +80,12 @@ public class JooqExceptionTranslator extends DefaultExecuteListener {
private void handle(ExecuteContext context, SQLExceptionTranslator translator, SQLException exception) { private void handle(ExecuteContext context, SQLExceptionTranslator translator, SQLException exception) {
DataAccessException translated = translate(context, translator, exception); DataAccessException translated = translate(context, translator, exception);
if (exception.getNextException() == null) { if (exception.getNextException() == null) {
context.exception(translated); if (translated != null) {
context.exception(translated);
}
} }
else { else {
logger.error("Execution of SQL statement failed.", translated); logger.error("Execution of SQL statement failed.", (translated != null) ? translated : exception);
} }
} }

@ -1,5 +1,5 @@
/* /*
* Copyright 2012-2019 the original author or authors. * Copyright 2012-2021 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@ -21,6 +21,7 @@ import java.sql.SQLException;
import org.jooq.Configuration; import org.jooq.Configuration;
import org.jooq.ExecuteContext; import org.jooq.ExecuteContext;
import org.jooq.SQLDialect; import org.jooq.SQLDialect;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.MethodSource; import org.junit.jupiter.params.provider.MethodSource;
import org.mockito.ArgumentCaptor; import org.mockito.ArgumentCaptor;
@ -28,8 +29,10 @@ import org.mockito.ArgumentCaptor;
import org.springframework.jdbc.BadSqlGrammarException; import org.springframework.jdbc.BadSqlGrammarException;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given; import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
/** /**
@ -55,6 +58,17 @@ class JooqExceptionTranslatorTests {
assertThat(captor.getValue()).isInstanceOf(BadSqlGrammarException.class); assertThat(captor.getValue()).isInstanceOf(BadSqlGrammarException.class);
} }
@Test
void whenExceptionCannotBeTranslatedThenExecuteContextExceptionIsNotCalled() {
ExecuteContext context = mock(ExecuteContext.class);
Configuration configuration = mock(Configuration.class);
given(context.configuration()).willReturn(configuration);
given(configuration.dialect()).willReturn(SQLDialect.POSTGRES);
given(context.sqlException()).willReturn(new SQLException(null, null, 123456789));
this.exceptionTranslator.exception(context);
verify(context, times(0)).exception(any());
}
static Object[] exceptionTranslation() { static Object[] exceptionTranslation() {
return new Object[] { new Object[] { SQLDialect.DERBY, sqlException("42802") }, return new Object[] { new Object[] { SQLDialect.DERBY, sqlException("42802") },
new Object[] { SQLDialect.H2, sqlException(42000) }, new Object[] { SQLDialect.H2, sqlException(42000) },

Loading…
Cancel
Save