std::shared_ptr EphemeralRowFields::makeBufferedFields()

in squangle/mysql_client/Row.cpp [17:42]


std::shared_ptr<RowFields> EphemeralRowFields::makeBufferedFields() const {
  if (num_fields_ == 0) {
    return nullptr;
  }
  std::vector<std::string> field_names;
  std::vector<std::string> table_names;
  folly::StringKeyedUnorderedMap<int> field_name_map;
  std::vector<uint64_t> mysql_field_flags;
  std::vector<enum_field_types> mysql_field_types;

  field_names.reserve(num_fields_);
  for (int i = 0; i < num_fields_; ++i) {
    MYSQL_FIELD* mysql_field = &fields_[i];
    field_names.emplace_back(mysql_field->name, mysql_field->name_length);
    table_names.emplace_back(mysql_field->table, mysql_field->table_length);
    mysql_field_flags.push_back(mysql_field->flags);
    mysql_field_types.push_back(mysql_field->type);
    field_name_map[mysql_field->name] = i;
  }
  return std::make_shared<RowFields>(
      std::move(field_name_map),
      std::move(field_names),
      std::move(table_names),
      std::move(mysql_field_flags),
      std::move(mysql_field_types));
}