folly::Optional MultiQueryStreamHandler::fetchOneRow()

in squangle/mysql_client/DbResult.cpp [299:324]


folly::Optional<EphemeralRow> MultiQueryStreamHandler::fetchOneRow(
    StreamedQueryResult* result) {
  checkStreamedQueryResult(result);
  connection()->wait();
  // Accepted states: ReadRows, ReadResult, OperationFailed
  if (state_ == State::ReadRows) {
    if (!operation_->rowStream()->hasNext()) {
      resumeOperation();
      // Recursion to get `wait` and double check the stream.
      return fetchOneRow(result);
    }
    return folly::Optional<EphemeralRow>(operation_->rowStream()->consumeRow());
  }

  if (state_ == State::ReadResult) {
    handleQueryEnded(result);
  } else if (state_ == State::OperationFailed) {
    handleQueryFailed(result);
  } else {
    LOG(DFATAL) << "Bad state transition. Only ReadRows, ReadResult and "
                << "OperationFailed are allowed. Received " << toString(state_)
                << ".";
    handleBadState();
  }
  return folly::Optional<EphemeralRow>();
}