| 1398 | } |
| 1399 | |
| 1400 | Status WriteFileFooter(const Schema& schema, const std::vector<FileBlock>& dictionaries, |
| 1401 | const std::vector<FileBlock>& record_batches, |
| 1402 | const std::shared_ptr<const KeyValueMetadata>& metadata, |
| 1403 | io::OutputStream* out) { |
| 1404 | FBB fbb; |
| 1405 | |
| 1406 | flatbuffers::Offset<flatbuf::Schema> fb_schema; |
| 1407 | DictionaryFieldMapper mapper(schema); |
| 1408 | RETURN_NOT_OK(SchemaToFlatbuffer(fbb, schema, mapper, &fb_schema)); |
| 1409 | |
| 1410 | #ifndef NDEBUG |
| 1411 | for (size_t i = 0; i < dictionaries.size(); ++i) { |
| 1412 | DCHECK(bit_util::IsMultipleOf8(dictionaries[i].offset)) << i; |
| 1413 | DCHECK(bit_util::IsMultipleOf8(dictionaries[i].metadata_length)) << i; |
| 1414 | DCHECK(bit_util::IsMultipleOf8(dictionaries[i].body_length)) << i; |
| 1415 | } |
| 1416 | |
| 1417 | for (size_t i = 0; i < record_batches.size(); ++i) { |
| 1418 | DCHECK(bit_util::IsMultipleOf8(record_batches[i].offset)) << i; |
| 1419 | DCHECK(bit_util::IsMultipleOf8(record_batches[i].metadata_length)) << i; |
| 1420 | DCHECK(bit_util::IsMultipleOf8(record_batches[i].body_length)) << i; |
| 1421 | } |
| 1422 | #endif |
| 1423 | |
| 1424 | auto fb_dictionaries = FileBlocksToFlatbuffer(fbb, dictionaries); |
| 1425 | auto fb_record_batches = FileBlocksToFlatbuffer(fbb, record_batches); |
| 1426 | |
| 1427 | auto fb_custom_metadata = SerializeCustomMetadata(fbb, metadata); |
| 1428 | |
| 1429 | auto footer = |
| 1430 | flatbuf::CreateFooter(fbb, kCurrentMetadataVersion, fb_schema, fb_dictionaries, |
| 1431 | fb_record_batches, fb_custom_metadata); |
| 1432 | fbb.Finish(footer); |
| 1433 | |
| 1434 | int32_t size = fbb.GetSize(); |
| 1435 | |
| 1436 | return out->Write(fbb.GetBufferPointer(), size); |
| 1437 | } |
| 1438 | |
| 1439 | // ---------------------------------------------------------------------- |
| 1440 |
no test coverage detected