diff --git a/vertx-mysql-client/src/test/java/io/vertx/tests/mysqlclient/tck/ProxySQLPreparedQueryTest.java b/vertx-mysql-client/src/test/java/io/vertx/tests/mysqlclient/tck/ProxySQLPreparedQueryTest.java index 8cc6fcf0d0..bdae2151c8 100644 --- a/vertx-mysql-client/src/test/java/io/vertx/tests/mysqlclient/tck/ProxySQLPreparedQueryTest.java +++ b/vertx-mysql-client/src/test/java/io/vertx/tests/mysqlclient/tck/ProxySQLPreparedQueryTest.java @@ -45,6 +45,13 @@ public void testQueryCloseCursor(TestContext ctx) { super.testQueryCloseCursor(ctx); } + @Test + @Ignore("Fetch command not supported by ProxySQL") + @Override + public void testQueryCloseCursorTwice(TestContext ctx) { + super.testQueryCloseCursorTwice(ctx); + } + @Test @Ignore("Fetch command not supported by ProxySQL") @Override diff --git a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/CursorImpl.java b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/CursorImpl.java index c525e6dbab..029474bc05 100644 --- a/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/CursorImpl.java +++ b/vertx-sql-client/src/main/java/io/vertx/sqlclient/impl/CursorImpl.java @@ -98,6 +98,8 @@ private synchronized void close(Promise promise) { result = null; ps.closeCursor(id, promise); } + } else { + promise.complete(); } } } diff --git a/vertx-sql-client/src/test/java/io/vertx/tests/sqlclient/tck/PreparedQueryTestBase.java b/vertx-sql-client/src/test/java/io/vertx/tests/sqlclient/tck/PreparedQueryTestBase.java index c073708855..7f22221207 100644 --- a/vertx-sql-client/src/test/java/io/vertx/tests/sqlclient/tck/PreparedQueryTestBase.java +++ b/vertx-sql-client/src/test/java/io/vertx/tests/sqlclient/tck/PreparedQueryTestBase.java @@ -11,6 +11,7 @@ package io.vertx.tests.sqlclient.tck; import io.vertx.core.AsyncResult; +import io.vertx.core.Future; import io.vertx.core.Handler; import io.vertx.core.Vertx; import io.vertx.ext.unit.Async; @@ -305,6 +306,19 @@ public void testQueryCloseCursor(TestContext ctx) { }); } + @Test + public void testQueryCloseCursorTwice(TestContext ctx) { + Async async = ctx.async(); + testCursor(ctx, conn -> { + conn + .prepare("SELECT * FROM immutable") + .onComplete(ctx.asyncAssertSuccess(ps -> { + Cursor cursor = ps.cursor(Tuple.tuple()); + Future.all(cursor.close(), cursor.close()).onComplete(ctx.asyncAssertSuccess(v -> async.complete())); + })); + }); + } + @Test public void testQueryStreamCloseCursor(TestContext ctx) { Async async = ctx.async();