From 8eef6822bf1699b5af9f2ffed08fa5c8d3ce81ff Mon Sep 17 00:00:00 2001 From: okou19900722 Date: Wed, 17 Apr 2019 09:42:56 +0800 Subject: [PATCH 1/2] catch the exception thrown by the synchronization --- .../ext/asyncsql/impl/AsyncSQLClientImpl.java | 71 ++++++++++++++++++- .../ext/asyncsql/impl/ClientWrapper.java | 52 +++++++++++++- 2 files changed, 119 insertions(+), 4 deletions(-) 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; + } } From 23cac7f074bc804dfc0359b9f0cc30b6f81d479a Mon Sep 17 00:00:00 2001 From: okou19900722 Date: Tue, 30 Apr 2019 16:10:31 +0800 Subject: [PATCH 2/2] add a test --- .../java/io/vertx/ext/asyncsql/MySQLClientTest.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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