aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/io/trygvis/async/SqlEffectExecutor.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/io/trygvis/async/SqlEffectExecutor.java')
-rw-r--r--src/main/java/io/trygvis/async/SqlEffectExecutor.java39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/main/java/io/trygvis/async/SqlEffectExecutor.java b/src/main/java/io/trygvis/async/SqlEffectExecutor.java
new file mode 100644
index 0000000..c8abbd3
--- /dev/null
+++ b/src/main/java/io/trygvis/async/SqlEffectExecutor.java
@@ -0,0 +1,39 @@
+package io.trygvis.async;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+public class SqlEffectExecutor {
+
+ private final DataSource dataSource;
+
+ public SqlEffectExecutor(DataSource dataSource) {
+ this.dataSource = dataSource;
+ }
+
+ public <A> A execute(SqlEffect<A> effect) {
+ try (Connection c = dataSource.getConnection()) {
+ return effect.doInConnection(c);
+ } catch (SQLException e) {
+ throw new SqlExecutionException(e);
+ }
+ }
+
+ public void execute(SqlEffect.Void effect) {
+ try (Connection c = dataSource.getConnection()) {
+ effect.doInConnection(c);
+ } catch (SQLException e) {
+ throw new SqlExecutionException(e);
+ }
+ }
+
+ public static class SqlExecutionException extends RuntimeException {
+ public final SQLException exception;
+
+ public SqlExecutionException(SQLException ex) {
+ super(ex);
+ this.exception = ex;
+ }
+ }
+}