encode method
Implementation
Uint8List encode() {
final beforeBytes = beforeImage ?? Uint8List(0);
final afterBytes = afterImage ?? Uint8List(0);
// DDL: encode ddlPayload as JSON in afterBytes
Uint8List effectiveAfter = afterBytes;
if (ddlPayload != null && afterBytes.isEmpty) {
effectiveAfter = Uint8List.fromList(utf8.encode(jsonEncode(ddlPayload)));
}
final totalLen = headerSize + beforeBytes.length + effectiveAfter.length;
final buf = Uint8List(totalLen);
final bd = ByteData.sublistView(buf);
bd.setUint32( 0, magic, Endian.little);
bd.setUint64( 4, lsn, Endian.little);
bd.setUint64(12, txnId, Endian.little);
bd.setUint64(20, prevLsn, Endian.little);
buf[28] = op.code;
buf[29] = flags;
bd.setUint16(30, tableId, Endian.little);
bd.setUint64(32, rowId, Endian.little);
bd.setUint32(40, beforeBytes.length, Endian.little);
bd.setUint32(44, effectiveAfter.length, Endian.little);
// offset 48: crc32 placeholder (0)
bd.setUint32(48, 0, Endian.little);
// Copy payloads
buf.setRange(headerSize,
headerSize + beforeBytes.length, beforeBytes);
buf.setRange(headerSize + beforeBytes.length,
headerSize + beforeBytes.length + effectiveAfter.length, effectiveAfter);
// Compute CRC over header + payloads
final crc2 = _computeCrcWithPayload(buf, 48);
bd.setUint32(48, crc2, Endian.little);
return buf;
}