write method

Uint8List write()

Implementation

Uint8List write() {
  final output = _ByteWriter()..writeBytes(_arrowFileMagic);
  output.align(8);

  final writer = _ArrowIpcRecordBatchWriter(
    schema: schema,
    columns: const [],
  );
  writer._writeIpcMessage(
    output,
    _ArrowIpcSchemaWriter(schema)._writeMessage(),
  );

  final dictionaryBlocks = <_IpcBlock>[];
  final recordBatchBlocks = <_IpcBlock>[];
  for (final batch in batches) {
    _validateRecordBatchColumns(schema, batch.columns);
    final context = _ArrayEncoderContext();
    final encoded = writer._encodeRecordBatch(
      schema.fields,
      batch.columns,
      context,
    );
    for (final dictionary in context.dictionaries.values) {
      final dictionaryBatch = writer._encodeDictionaryBatch(dictionary);
      dictionaryBlocks.add(
        writer._writeIpcMessage(
          output,
          writer._writeDictionaryBatchMessage(dictionary.id, dictionaryBatch),
          body: dictionaryBatch.body,
        ),
      );
    }
    recordBatchBlocks.add(
      writer._writeIpcMessage(
        output,
        writer._writeRecordBatchMessage(encoded),
        body: encoded.body,
      ),
    );
  }

  output.writeInt32(-1);
  output.writeUint32(0);
  output.align(8);
  final footer = _ArrowIpcFileFooterWriter(
    schema: schema,
    dictionaryBlocks: dictionaryBlocks,
    recordBatchBlocks: recordBatchBlocks,
  ).write();
  output.writeBytes(footer);
  output.writeInt32(footer.length);
  output.writeBytes(_arrowFileMagic);
  return output.toBytes();
}