bool FetchOperation::RowStream::slurp()

in squangle/mysql_client/Operation.cpp [1031:1050]


bool FetchOperation::RowStream::slurp() {
  CHECK_THROW(mysql_query_result_ != nullptr, db::OperationStateException);
  if (current_row_.has_value() || query_finished_) {
    return true;
  }
  MYSQL_ROW row;
  auto status = handler_->fetchRow(mysql_query_result_.get(), row);
  if (status == MysqlHandler::PENDING) {
    return false;
  }
  if (row == nullptr) {
    query_finished_ = true;
    return true;
  }
  unsigned long* field_lengths = mysql_fetch_lengths(mysql_query_result_.get());
  current_row_.assign(EphemeralRow(row, field_lengths, &row_fields_));
  query_result_size_ += current_row_->calculateRowLength();
  ++num_rows_seen_;
  return true;
}