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;
}