| 322 | } |
| 323 | |
| 324 | Result<std::shared_ptr<Table>> Table::FromChunkedStructArray( |
| 325 | const std::shared_ptr<ChunkedArray>& array) { |
| 326 | auto type = array->type(); |
| 327 | if (type->id() != Type::STRUCT) { |
| 328 | return Status::Invalid("Expected a chunked struct array, got ", *type); |
| 329 | } |
| 330 | int num_columns = type->num_fields(); |
| 331 | int num_chunks = array->num_chunks(); |
| 332 | |
| 333 | const auto& struct_chunks = array->chunks(); |
| 334 | std::vector<std::shared_ptr<ChunkedArray>> columns(num_columns); |
| 335 | for (int i = 0; i < num_columns; ++i) { |
| 336 | ArrayVector chunks(num_chunks); |
| 337 | std::transform(struct_chunks.begin(), struct_chunks.end(), chunks.begin(), |
| 338 | [i](const std::shared_ptr<Array>& struct_chunk) { |
| 339 | return static_cast<const StructArray&>(*struct_chunk).field(i); |
| 340 | }); |
| 341 | columns[i] = |
| 342 | std::make_shared<ChunkedArray>(std::move(chunks), type->field(i)->type()); |
| 343 | } |
| 344 | |
| 345 | return Table::Make(::arrow::schema(type->fields()), std::move(columns), |
| 346 | array->length()); |
| 347 | } |
| 348 | |
| 349 | std::vector<std::string> Table::ColumnNames() const { |
| 350 | std::vector<std::string> names(num_columns()); |
nothing calls this directly
no test coverage detected