| 599 | } |
| 600 | |
| 601 | Status MakeStruct(std::shared_ptr<RecordBatch>* out) { |
| 602 | // reuse constructed list columns |
| 603 | std::shared_ptr<RecordBatch> list_batch; |
| 604 | RETURN_NOT_OK(MakeListRecordBatch(&list_batch)); |
| 605 | std::vector<std::shared_ptr<Array>> columns = { |
| 606 | list_batch->column(0), list_batch->column(1), list_batch->column(2)}; |
| 607 | auto list_schema = list_batch->schema(); |
| 608 | |
| 609 | // Define schema |
| 610 | std::shared_ptr<DataType> type(new StructType( |
| 611 | {list_schema->field(0), list_schema->field(1), list_schema->field(2)})); |
| 612 | auto f0 = field("non_null_struct", type); |
| 613 | auto f1 = field("null_struct", type); |
| 614 | auto schema = ::arrow::schema({f0, f1}); |
| 615 | |
| 616 | // construct individual nullable/non-nullable struct arrays |
| 617 | std::shared_ptr<Array> no_nulls(new StructArray(type, list_batch->num_rows(), columns)); |
| 618 | std::vector<uint8_t> null_bytes(list_batch->num_rows(), 1); |
| 619 | null_bytes[0] = 0; |
| 620 | ARROW_ASSIGN_OR_RAISE(auto null_bitmap, arrow::internal::BytesToBits(null_bytes)); |
| 621 | std::shared_ptr<Array> with_nulls( |
| 622 | new StructArray(type, list_batch->num_rows(), columns, null_bitmap, 1)); |
| 623 | |
| 624 | // construct batch |
| 625 | std::vector<std::shared_ptr<Array>> arrays = {no_nulls, with_nulls}; |
| 626 | *out = RecordBatch::Make(schema, list_batch->num_rows(), arrays); |
| 627 | return Status::OK(); |
| 628 | } |
| 629 | |
| 630 | namespace { |
| 631 | |