From 6dc5ba312587afacc9b160d4285a408fe456bae9 Mon Sep 17 00:00:00 2001 From: kaklakariada Date: Sat, 4 Jan 2025 15:23:58 +0100 Subject: [PATCH 1/2] Allow access to connection from DbOperations --- src/main/java/org/itsallcode/jdbc/DbOperations.java | 10 ++++++++++ .../java/org/itsallcode/jdbc/SimpleConnection.java | 8 +------- src/main/java/org/itsallcode/jdbc/Transaction.java | 5 +++++ .../java/org/itsallcode/jdbc/SimpleConnectionTest.java | 1 + src/test/java/org/itsallcode/jdbc/TransactionTest.java | 10 ++++++++++ 5 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/main/java/org/itsallcode/jdbc/DbOperations.java b/src/main/java/org/itsallcode/jdbc/DbOperations.java index b109902..32b3676 100644 --- a/src/main/java/org/itsallcode/jdbc/DbOperations.java +++ b/src/main/java/org/itsallcode/jdbc/DbOperations.java @@ -1,5 +1,6 @@ package org.itsallcode.jdbc; +import java.sql.Connection; import java.sql.PreparedStatement; import java.util.Iterator; import java.util.List; @@ -135,6 +136,15 @@ SimpleResultSet query(final String sql, final PreparedStatementSetter pre */ RowBatchInsertBuilder batchInsert(final Class rowType); + /** + * Get the original wrapped connection. + *

+ * Use this in case of missing features in {@link DbOperations}. + * + * @return original wrapped connection + */ + public Connection getOriginalConnection(); + @Override void close(); } diff --git a/src/main/java/org/itsallcode/jdbc/SimpleConnection.java b/src/main/java/org/itsallcode/jdbc/SimpleConnection.java index fb835db..09f6c65 100644 --- a/src/main/java/org/itsallcode/jdbc/SimpleConnection.java +++ b/src/main/java/org/itsallcode/jdbc/SimpleConnection.java @@ -106,14 +106,8 @@ public RowBatchInsertBuilder batchInsert(final Class rowType) { return connection.rowBatchInsert(); } - /** - * Get the original wrapped connection. - *

- * Use this in case of missing features in {@link SimpleConnection}. - * - * @return original wrapped connection - */ public Connection getOriginalConnection() { + checkOperationAllowed(); return connection.getOriginalConnection(); } diff --git a/src/main/java/org/itsallcode/jdbc/Transaction.java b/src/main/java/org/itsallcode/jdbc/Transaction.java index 0e8a88c..5530a7e 100644 --- a/src/main/java/org/itsallcode/jdbc/Transaction.java +++ b/src/main/java/org/itsallcode/jdbc/Transaction.java @@ -111,6 +111,11 @@ public RowBatchInsertBuilder batchInsert(final Class rowType) { return connection.rowBatchInsert(); } + public Connection getOriginalConnection() { + checkOperationAllowed(); + return connection.getOriginalConnection(); + } + private void checkOperationAllowed() { if (this.closed) { throw new IllegalStateException("Operation not allowed on closed transaction"); diff --git a/src/test/java/org/itsallcode/jdbc/SimpleConnectionTest.java b/src/test/java/org/itsallcode/jdbc/SimpleConnectionTest.java index 7a5276c..fe3c8a1 100644 --- a/src/test/java/org/itsallcode/jdbc/SimpleConnectionTest.java +++ b/src/test/java/org/itsallcode/jdbc/SimpleConnectionTest.java @@ -71,6 +71,7 @@ static Stream operations() { operation(con -> con.query("sql", rowMapperMock)), operation(con -> con.query("sql", preparedStatementSetterMock, rowMapperMock)), operation(con -> con.query("sql", List.of(), rowMapperMock)), + operation(con -> con.getOriginalConnection()), operation(con -> con.batchInsert()), operation(con -> con.batchInsert(null))); } diff --git a/src/test/java/org/itsallcode/jdbc/TransactionTest.java b/src/test/java/org/itsallcode/jdbc/TransactionTest.java index a03214e..a2e52e5 100644 --- a/src/test/java/org/itsallcode/jdbc/TransactionTest.java +++ b/src/test/java/org/itsallcode/jdbc/TransactionTest.java @@ -1,11 +1,13 @@ package org.itsallcode.jdbc; +import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.same; import static org.mockito.Mockito.*; +import java.sql.Connection; import java.util.List; import java.util.function.Consumer; import java.util.stream.Stream; @@ -74,6 +76,7 @@ static Stream operations() { operation(tx -> tx.query("sql", List.of(), rowMapperMock)), operation(tx -> tx.batchInsert()), operation(tx -> tx.batchInsert(null)), + operation(tx -> tx.getOriginalConnection()), operation(tx -> tx.commit()), operation(tx -> tx.rollback())); } @@ -198,6 +201,13 @@ void rollbackCallsTransactionFinishedCallback() { verify(transactionFinishedCallbackMock).accept(same(testee)); } + @Test + void getOriginalConnection() { + final Connection jdbcConnectionMock = mock(Connection.class); + when(connectionMock.getOriginalConnection()).thenReturn(jdbcConnectionMock); + assertThat(startTransaction().getOriginalConnection()).isSameAs(jdbcConnectionMock); + } + private Transaction startTransaction() { return Transaction.start(connectionMock, transactionFinishedCallbackMock); } From 6a9aa22c8de5dade940568a0db7cbc51d4222be8 Mon Sep 17 00:00:00 2001 From: kaklakariada Date: Sat, 4 Jan 2025 15:24:38 +0100 Subject: [PATCH 2/2] Add changelog entry --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 55e7a7d..d4274b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - [PR #40](https://github.com/itsallcode/simple-jdbc/pull/40): Verify that operation on `SimpleConnection` are allowed - [PR #41](https://github.com/itsallcode/simple-jdbc/pull/41): Allow direct access to `PreparedStatement` for batch insert - [PR #42](https://github.com/itsallcode/simple-jdbc/pull/42): Allow direct access to `Connection` +- [PR #43](https://github.com/itsallcode/simple-jdbc/pull/43): Allow direct access to `Connection` from `DbOperations` ## [0.9.0] - 2024-12-23