| 195 | } |
| 196 | |
| 197 | cpp11::writable::list CollectColumnMetadata(SEXP lst, int num_fields) { |
| 198 | // Preallocate for the lambda to fill in |
| 199 | cpp11::writable::list metadata_columns(num_fields); |
| 200 | |
| 201 | cpp11::writable::strings metadata_columns_names(num_fields); |
| 202 | |
| 203 | auto extract_one_metadata = [&metadata_columns, &metadata_columns_names]( |
| 204 | int j, SEXP x, std::string name) { |
| 205 | metadata_columns_names[j] = name; |
| 206 | |
| 207 | // no metadata for arrow R6 objects |
| 208 | if (Rf_inherits(x, "ArrowObject")) { |
| 209 | return; |
| 210 | } |
| 211 | metadata_columns[j] = arrow_attributes(x, false); |
| 212 | }; |
| 213 | arrow::r::TraverseDots(lst, num_fields, extract_one_metadata); |
| 214 | |
| 215 | metadata_columns.names() = metadata_columns_names; |
| 216 | return metadata_columns; |
| 217 | } |
| 218 | |
| 219 | arrow::Status AddMetadataFromDots(SEXP lst, int num_fields, |
| 220 | std::shared_ptr<arrow::Schema>& schema) { |
no test coverage detected