encode method

Uint8List encode()

Implementation

Uint8List encode() {
  final beforeBytes = beforeImage ?? Uint8List(0);
  final afterBytes  = afterImage  ?? Uint8List(0);

  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);
  bdSetUint64(bd,  4, lsn);
  bdSetUint64(bd, 12, txnId);
  bdSetUint64(bd, 20, prevLsn);
  buf[28] = op.code;
  buf[29] = flags;
  bd.setUint16(30, tableId,                  Endian.little);
  bdSetUint64(bd, 32, rowId);
  bd.setUint32(40, beforeBytes.length,       Endian.little);
  bd.setUint32(44, effectiveAfter.length,    Endian.little);
  bd.setUint32(48, 0,                        Endian.little); // CRC placeholder

  buf.setRange(headerSize,
      headerSize + beforeBytes.length, beforeBytes);
  buf.setRange(headerSize + beforeBytes.length,
      headerSize + beforeBytes.length + effectiveAfter.length, effectiveAfter);

  final crc = _computeCrcWithPayload(buf, 48);
  bd.setUint32(48, crc, Endian.little);

  return buf;
}