folly::Optional MultiQueryStreamHandler::nextQuery()

in squangle/mysql_client/DbResult.cpp [218:241]


folly::Optional<StreamedQueryResult> MultiQueryStreamHandler::nextQuery() {
  if (state_ == State::RunQuery) {
    start();
  }

  // Runs in User thread
  connection()->wait();
  DCHECK(operation_->isPaused() || operation_->done());

  folly::Optional<StreamedQueryResult> res;
  // Accepted states: InitResult, OperationSucceeded or OperationFailed
  if (state_ == State::InitResult) {
    res.assign(StreamedQueryResult(this, ++curr_query_));
    resumeOperation();
  } else if (state_ == State::OperationFailed) {
    handleQueryFailed(nullptr);
  } else if (state_ != State::OperationSucceeded) {
    LOG(DFATAL) << "Bad state transition. Perhaps reading next result without"
                << " deleting or consuming current stream? Current state is "
                << toString(state_) << ".";
    handleBadState();
  }
  return res;
}