/** * @brief Serialize LogRecordHeader * @param output */ void TupleRecord::SerializeHeader(CopySerializeOutput &output) { // Record LogRecordType first output.WriteEnumInSingleByte(log_record_type); size_t start = output.Position(); // then reserve 4 bytes for the header size output.WriteInt(0); output.WriteLong(db_oid); output.WriteLong(table_oid); output.WriteLong(txn_id); output.WriteLong(insert_location.block); output.WriteLong(insert_location.offset); output.WriteLong(delete_location.block); output.WriteLong(delete_location.offset); output.WriteIntAt( start, static_cast<int32_t>(output.Position() - start - sizeof(int32_t))); }
/** * @brief Serialize given data * @return true if we serialize data otherwise false */ bool TransactionRecord::Serialize(CopySerializeOutput &output) { bool status = true; output.Reset(); // First, write out the log record type output.WriteEnumInSingleByte(log_record_type); // Then reserve 4 bytes for the header size to be written later size_t start = output.Position(); output.WriteInt(0); output.WriteLong(cid); // Write out the header now int32_t header_length = static_cast<int32_t>(output.Position() - start - sizeof(int32_t)); output.WriteIntAt(start, header_length); message_length = output.Size(); message = new char[message_length]; PL_MEMCPY(message, output.Data(), message_length); return status; }