@Override public void handle(AsyncResult<Result> ar) { JdbcResultSet resultSet = null; if (ar.isSucceeded()) { Result r = ar.getResult(); resultSet = new JdbcResultSet(conn, JdbcStatement.this, r, id, closedByResultSet, scrollable, updatable); resultSet.setCommand(command); } setExecutingStatement(null); if (handler != null) { AsyncResult<ResultSet> r2 = new AsyncResult<>(); if (ar.isSucceeded()) r2.setResult(resultSet); else r2.setCause(ar.getCause()); handler.handle(r2); } } };
default void executeQueryAsync(int maxRows, boolean scrollable, List<PageKey> pageKeys, AsyncHandler<AsyncResult<Result>> handler) { Result result = executeQuery(maxRows, scrollable, pageKeys); if (handler != null) { AsyncResult<Result> r = new AsyncResult<>(); r.setResult(result); handler.handle(r); } }
@Override public void handle(AsyncResult<Result> ar) { Result r = ar.getResult(); resultSet = new JdbcResultSet(conn, JdbcPreparedStatement.this, r, id, closedByResultSet, scrollable, updatable, cachedColumnLabelMap); setExecutingStatement(null); resultSet.setCommand(command); if (handler != null) { AsyncResult<ResultSet> r2 = new AsyncResult<>(); r2.setResult(resultSet); handler.handle(r2); } } };
rowCount = updateCount; if (updateHandler != null) { AsyncResult<Integer> ar = new AsyncResult<>(); ar.setResult(updateCount); asyncResult = ar; result = r; if (queryHandler != null) { AsyncResult<Result> ar = new AsyncResult<>(); ar.setResult(r); asyncResult = ar; asyncResult = new AsyncResult(); asyncResult.setCause(e); asyncHandler.handle(asyncResult); async = false; // 不需要再回调了
@SuppressWarnings("unchecked") public final void run(Transfer transfer) { if (e == null) { this.transfer.setDataInputStream(transfer.getDataInputStream()); runInternal(); } else if (ah != null) { AsyncResult r = new AsyncResult(); r.setCause(e); ah.handle(r); } if (ah == null) latch.countDown(); }
@Override public void run() { command.executeUpdateAsync(pageKeys, res -> { if (res.isSucceeded()) { int updateCount = res.getResult(); try { transfer.writeResponseHeader(id, getStatus(session)); if (session.isRunModeChanged()) { transfer.writeInt(sessionId).writeString(session.getNewTargetEndpoints()); } if (operation == Session.COMMAND_DISTRIBUTED_TRANSACTION_UPDATE || operation == Session.COMMAND_DISTRIBUTED_TRANSACTION_PREPARED_UPDATE) { transfer.writeString(session.getTransaction().getLocalTransactionNames()); } transfer.writeInt(updateCount); transfer.writeLong(session.getLastRowKey()); transfer.flush(); } catch (Exception e) { sendError(transfer, id, e); } } else { sendError(transfer, id, res.getCause()); } }); } });
@Override public void handle(AsyncResult<Integer> ar) { if (ar.isSucceeded()) updateCount = ar.getResult(); // 设置完后再调用handle,否则有可能当前语句提前关闭了 setExecutingStatement(null); command.close(); handler.handle(ar); } };
@Override public void handle(AsyncResult<Integer> ar) { updateCount = ar.getResult(); setExecutingStatement(null); handler.handle(ar); } };
default void executeUpdateAsync(List<PageKey> pageKeys, AsyncHandler<AsyncResult<Integer>> handler) { int updateCount = executeUpdate(pageKeys); if (handler != null) { AsyncResult<Integer> r = new AsyncResult<>(); r.setResult(updateCount); handler.handle(r); } }
@Override public void run() { command.executeQueryAsync(maxRows, scrollable, pageKeys, res -> { if (res.isSucceeded()) { Result result = res.getResult(); cache.addObject(resultId, result); try { sendError(transfer, id, res.getCause());
@Override public void runInternal() { try { if (isDistributedUpdate) session.getParentTransaction().addLocalTransactionNames(transfer.readString()); int updateCount = transfer.readInt(); long key = transfer.readLong(); if (commandUpdateResult != null) { commandUpdateResult.setUpdateCount(updateCount); commandUpdateResult.addResult(ClientCommand.this, key); } setResult(updateCount); if (handler != null) { AsyncResult<Integer> r = new AsyncResult<>(); r.setResult(updateCount); handler.handle(r); } } catch (IOException e) { throw DbException.convert(e); } } };
@Override public void runInternal() { try { if (isDistributedQuery) session.getParentTransaction().addLocalTransactionNames(transfer.readString()); int columnCount = transfer.readInt(); int rowCount = transfer.readInt(); ClientResult result; if (rowCount < 0) result = new RowCountUndeterminedClientResult(session, transfer, resultId, columnCount, fetch); else result = new RowCountDeterminedClientResult(session, transfer, resultId, columnCount, rowCount, fetch); setResult(result); if (handler != null) { AsyncResult<Result> r = new AsyncResult<>(); r.setResult(result); handler.handle(r); } } catch (IOException e) { throw DbException.convert(e); } } };