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