diff --git a/vertx-mysql-postgresql-client-jasync/src/main/java/io/vertx/ext/asyncsql/impl/AsyncSQLClientImpl.java b/vertx-mysql-postgresql-client-jasync/src/main/java/io/vertx/ext/asyncsql/impl/AsyncSQLClientImpl.java index 8bda55e1..6efe4e58 100644 --- a/vertx-mysql-postgresql-client-jasync/src/main/java/io/vertx/ext/asyncsql/impl/AsyncSQLClientImpl.java +++ b/vertx-mysql-postgresql-client-jasync/src/main/java/io/vertx/ext/asyncsql/impl/AsyncSQLClientImpl.java @@ -17,12 +17,15 @@ package io.vertx.ext.asyncsql.impl; import io.vertx.core.AsyncResult; +import io.vertx.core.Future; import io.vertx.core.Handler; import io.vertx.core.Vertx; +import io.vertx.core.json.JsonArray; import io.vertx.core.json.JsonObject; import io.vertx.ext.asyncsql.AsyncSQLClient; -import io.vertx.ext.sql.SQLClient; -import io.vertx.ext.sql.SQLConnection; +import io.vertx.ext.sql.*; + +import java.util.function.Function; /** * @author Joern Bernhardt. @@ -55,4 +58,68 @@ public SQLClient getConnection(Handler> handler) { return this; } + @Override + public SQLClient query(String sql, Handler> handler) { + executeDirect(conn -> Future.future(f -> conn.query(sql, f)), handler); + return this; + } + + @Override + public SQLClient queryStream(String sql, Handler> handler) { + executeDirect(conn -> Future.future(f -> conn.queryStream(sql, f)), handler); + return this; + } + + @Override + public SQLClient queryStreamWithParams(String sql, JsonArray params, Handler> handler) { + executeDirect(conn -> Future.future(f -> conn.queryStreamWithParams(sql, params, f)), handler); + return this; + } + + @Override + public SQLClient queryWithParams(String sql, JsonArray params, Handler> handler) { + executeDirect(conn -> Future.future(f -> conn.queryWithParams(sql, params, f)), handler); + return this; + } + + @Override + public SQLClient update(String sql, Handler> handler) { + executeDirect(conn -> Future.future(f -> conn.update(sql, f)), handler); + return this; + } + + @Override + public SQLClient updateWithParams(String sql, JsonArray params, Handler> handler) { + executeDirect(conn -> Future.future(f -> conn.updateWithParams(sql, params, f)), handler); + return this; + } + + @Override + public SQLClient call(String sql, Handler> handler) { + executeDirect(conn -> Future.future(f -> conn.call(sql, f)), handler); + return this; + } + + @Override + public SQLClient callWithParams(String sql, JsonArray params, JsonArray outputs, Handler> handler) { + executeDirect(conn -> Future.future(f -> conn.callWithParams(sql, params, outputs, f)), handler); + return this; + } + + private void executeDirect(Function> action, Handler> handler) { + getConnection(getConnection -> { + if (getConnection.failed()) { + handler.handle(Future.failedFuture(getConnection.cause())); + } else { + final SQLConnection conn = getConnection.result(); + Future future; + try { + future = action.apply(conn); + } catch (Throwable e) { + future = Future.failedFuture(e); + } + future.setHandler(handler); + } + }); + } } diff --git a/vertx-mysql-postgresql-client-jasync/src/main/java/io/vertx/ext/asyncsql/impl/ClientWrapper.java b/vertx-mysql-postgresql-client-jasync/src/main/java/io/vertx/ext/asyncsql/impl/ClientWrapper.java index 8e396c89..78553ece 100644 --- a/vertx-mysql-postgresql-client-jasync/src/main/java/io/vertx/ext/asyncsql/impl/ClientWrapper.java +++ b/vertx-mysql-postgresql-client-jasync/src/main/java/io/vertx/ext/asyncsql/impl/ClientWrapper.java @@ -18,9 +18,9 @@ import io.vertx.core.AsyncResult; import io.vertx.core.Handler; +import io.vertx.core.json.JsonArray; import io.vertx.ext.asyncsql.AsyncSQLClient; -import io.vertx.ext.sql.SQLClient; -import io.vertx.ext.sql.SQLConnection; +import io.vertx.ext.sql.*; /** * Wraps a client with the {@link ClientHolder} in order to keep track of the references. @@ -51,4 +51,52 @@ public void close() { public SQLClient getConnection(Handler> handler) { return client.getConnection(handler); } + + @Override + public SQLClient query(String sql, Handler> handler) { + client.query(sql, handler); + return this; + } + + @Override + public SQLClient queryStream(String sql, Handler> handler) { + client.queryStream(sql, handler); + return this; + } + + @Override + public SQLClient queryStreamWithParams(String sql, JsonArray params, Handler> handler) { + client.queryStreamWithParams(sql, params, handler); + return this; + } + + @Override + public SQLClient queryWithParams(String sql, JsonArray params, Handler> handler) { + client.queryWithParams(sql, params, handler); + return this; + } + + @Override + public SQLClient update(String sql, Handler> handler) { + client.update(sql, handler); + return this; + } + + @Override + public SQLClient updateWithParams(String sql, JsonArray params, Handler> handler) { + client.updateWithParams(sql, params, handler); + return this; + } + + @Override + public SQLClient call(String sql, Handler> handler) { + client.call(sql, handler); + return this; + } + + @Override + public SQLClient callWithParams(String sql, JsonArray params, JsonArray outputs, Handler> handler) { + client.callWithParams(sql, params, outputs, handler); + return this; + } } diff --git a/vertx-mysql-postgresql-client-jasync/src/test/java/io/vertx/ext/asyncsql/MySQLClientTest.java b/vertx-mysql-postgresql-client-jasync/src/test/java/io/vertx/ext/asyncsql/MySQLClientTest.java index 057944de..03c1438c 100644 --- a/vertx-mysql-postgresql-client-jasync/src/test/java/io/vertx/ext/asyncsql/MySQLClientTest.java +++ b/vertx-mysql-postgresql-client-jasync/src/test/java/io/vertx/ext/asyncsql/MySQLClientTest.java @@ -16,6 +16,7 @@ package io.vertx.ext.asyncsql; +import com.github.jasync.sql.db.exceptions.InsufficientParametersException; import io.vertx.ext.asyncsql.category.NeedsDocker; import org.junit.*; @@ -116,6 +117,18 @@ public void testInsertedIds(TestContext context) { }); } + @Test + public void test(TestContext context){ + JsonArray arr = new JsonArray().add(1).add(2); + Async async = context.async(); + // a exception will throw. @see https://github.com/jasync-sql/jasync-sql/blob/master/mysql-async/src/main/java/com/github/jasync/sql/db/mysql/MySQLConnection.kt#L288-L301 + client.queryWithParams("?", arr, r -> { + context.assertTrue(r.failed()); + context.assertTrue(r.cause() instanceof InsufficientParametersException); + async.complete(); + }); + } + @Override protected void compareInstantStrings(TestContext context, String result, String expected) { // mysql will perform some rounding since it does not have the precision to store the full TS