private void endTx(SQLConnection conn, Handler<ResultSet> done) { conn.commit(res -> { if (res.failed()) { throw new RuntimeException(res.cause()); } done.handle(null); }); } }
/** * Commits all changes made since the previous commit/rollback. * @param handler the handler called when this operation completes. * @return */ public io.vertx.rxjava.ext.sql.SQLConnection commit(Handler<AsyncResult<Void>> handler) { delegate.commit(handler); return this; }
/** * Commits all changes made since the previous commit/rollback. * @param handler the handler called when this operation completes. * @return */ public io.vertx.rxjava.ext.sql.SQLConnection commit(Handler<AsyncResult<Void>> handler) { delegate.commit(handler); return this; }
@Override public CompletableFuture<Void> commit() { LOGGER.debug("Connection [{}] - commit", connectionNumber); CompletableFuture<Void> result = new CompletableFuture<>(); connection.commit(handler -> { if (handler.succeeded()) { result.complete(null); } else { result.completeExceptionally(handler.cause()); } }); return result; }
@Override public SQLConnection commit(Handler<AsyncResult<Void>> handler) { delegate.commit(handler); return this; }
@Override public void commit(IAsyncResultHandler<Void> handler) { connection.commit(translateVoidHandlers(handler)); }
@Test public void testTwoTransactionsAfterEachOther(TestContext context) { Async async = context.async(); client.getConnection(ar -> { if (ar.failed()) { context.fail(ar.cause()); return; } conn = ar.result(); conn.setAutoCommit(false, ar2 -> { ensureSuccess(context, ar2); conn.query("SELECT 1", ar3 -> { ensureSuccess(context, ar3); conn.commit(ar4 -> { ensureSuccess(context, ar4); conn.query("SELECT 2", ar5 -> { ensureSuccess(context, ar5); conn.commit(ar6 -> { ensureSuccess(context, ar6); conn.setAutoCommit(true, ar7 -> { ensureSuccess(context, ar7); async.complete(); }); }); }); }); }); }); }); }
@Test public void testTwoTransactionsAfterEachOther(TestContext context) { Async async = context.async(); client.getConnection(ar -> { if (ar.failed()) { context.fail(ar.cause()); return; } conn = ar.result(); conn.setAutoCommit(false, ar2 -> { ensureSuccess(context, ar2); conn.query("SELECT 1", ar3 -> { ensureSuccess(context, ar3); conn.commit(ar4 -> { ensureSuccess(context, ar4); conn.query("SELECT 2", ar5 -> { ensureSuccess(context, ar5); conn.commit(ar6 -> { ensureSuccess(context, ar6); conn.setAutoCommit(true, ar7 -> { ensureSuccess(context, ar7); async.complete(); }); }); }); }); }); }); }); }
@Test public void testEmptyTransactions(TestContext context) { Async async = context.async(); client.getConnection(ar -> { if (ar.failed()) { context.fail(ar.cause()); return; } conn = ar.result(); conn.setAutoCommit(false, ar2 -> { ensureSuccess(context, ar2); conn.rollback(ar3 -> { ensureSuccess(context, ar3); conn.commit(ar4 -> { ensureSuccess(context, ar4); conn.setAutoCommit(true, ar5 -> { ensureSuccess(context, ar5); async.complete(); }); }); }); }); }); }
@Test public void testTwoTransactionsAfterEachOther(TestContext context) { Async async = context.async(); client.getConnection(ar -> { if (ar.failed()) { context.fail(ar.cause()); return; } conn = ar.result(); conn.setAutoCommit(false, ar2 -> { ensureSuccess(context, ar2); conn.query("SELECT 1", ar3 -> { ensureSuccess(context, ar3); conn.commit(ar4 -> { ensureSuccess(context, ar4); conn.query("SELECT 2", ar5 -> { ensureSuccess(context, ar5); conn.commit(ar6 -> { ensureSuccess(context, ar6); conn.setAutoCommit(true, ar7 -> { ensureSuccess(context, ar7); async.complete(); }); }); }); }); }); }); }); }
@Test public void testEmptyTransactions(TestContext context) { Async async = context.async(); client.getConnection(ar -> { if (ar.failed()) { context.fail(ar.cause()); return; } conn = ar.result(); conn.setAutoCommit(false, ar2 -> { ensureSuccess(context, ar2); conn.rollback(ar3 -> { ensureSuccess(context, ar3); conn.commit(ar4 -> { ensureSuccess(context, ar4); conn.setAutoCommit(true, ar5 -> { ensureSuccess(context, ar5); async.complete(); }); }); }); }); }); }
@Test public void testWorkerPerConnection() { int numConns = 4; ArrayList<SQLConnection> conns = new ArrayList<>(); for (int i = 0; i < numConns; i++) { conns.add(connection()); } AtomicInteger count = new AtomicInteger(); Context context = vertx.getOrCreateContext(); context.runOnContext(v -> { for (SQLConnection conn : conns) { conn.setAutoCommit(false, onSuccess(ar1 -> { conn.execute("LOCK TABLE insert_table WRITE", onSuccess(ar2 -> { String sql = "INSERT INTO insert_table VALUES (null, 'doe', 'john', '2001-01-01');"; conn.update(sql, onSuccess(res3 -> { conn.commit(onSuccess(committed -> { conn.close(onSuccess(closed -> { if (count.incrementAndGet() == numConns) { testComplete(); } })); })); })); })); })); } }); await(); }
conn.commit(onSuccess(v -> { client.getConnection(onSuccess(newconn -> {
@Test public void testCommitWhenNotInTransaction(TestContext context) { int id = 0; String name = "adele"; Async async = context.async(); client.getConnection(ar -> { ensureSuccess(context, ar); conn = ar.result(); setupSimpleTable(conn, ar2 -> { ensureSuccess(context, ar2); conn.setAutoCommit(false, ar3 -> { ensureSuccess(context, ar3); conn.updateWithParams("UPDATE test_table SET name=? WHERE id=?", new JsonArray().add(name).add(id), ar4 -> { ensureSuccess(context, ar4); conn.setAutoCommit(true, ar5 -> { ensureSuccess(context, ar5); conn.commit(ar6 -> { context.assertTrue(ar6.failed()); async.complete(); }); }); }); }); }); }); }
@Test public void testCommitWhenNotInTransaction(TestContext context) { int id = 0; String name = "adele"; Async async = context.async(); client.getConnection(ar -> { ensureSuccess(context, ar); conn = ar.result(); setupSimpleTable(conn, ar2 -> { ensureSuccess(context, ar2); conn.setAutoCommit(false, ar3 -> { ensureSuccess(context, ar3); conn.updateWithParams("UPDATE test_table SET name=? WHERE id=?", new JsonArray().add(name).add(id), ar4 -> { ensureSuccess(context, ar4); conn.setAutoCommit(true, ar5 -> { ensureSuccess(context, ar5); conn.commit(ar6 -> { context.assertTrue(ar6.failed()); async.complete(); }); }); }); }); }); }); }
@Test public void testCommitWhenNotInTransaction(TestContext context) { int id = 0; String name = "adele"; Async async = context.async(); client.getConnection(ar -> { ensureSuccess(context, ar); conn = ar.result(); setupSimpleTable(conn, ar2 -> { ensureSuccess(context, ar2); conn.setAutoCommit(false, ar3 -> { ensureSuccess(context, ar3); conn.updateWithParams("UPDATE test_table SET name=? WHERE id=?", new JsonArray().add(name).add(id), ar4 -> { ensureSuccess(context, ar4); conn.setAutoCommit(true, ar5 -> { ensureSuccess(context, ar5); conn.commit(ar6 -> { context.assertTrue(ar6.failed()); async.complete(); }); }); }); }); }); }); }