Example #1
0
        public static byte[] BuildPrimaryKeyWithHeader(PrimaryKey primaryKey)
        {
            int size = ComputePrimaryKeyWithHeader(primaryKey);
            PlainBufferOutputStream output = new PlainBufferOutputStream(size);

            output.WriteRawLittleEndian32(PlainBufferConsts.HEADER);
            output.WriteRawByte(PlainBufferConsts.TAG_ROW_PK);

            byte rowChecksum = (byte)0x0, cellChecksum;

            foreach (var key in primaryKey)
            {
                var column = new Column(key.Key, key.Value);
                cellChecksum = PlainBufferCrc8.crc8((byte)0x0, column.GetNameRawData());
                cellChecksum = column.Value.GetChecksum(cellChecksum);
                WritePrimaryKeyColumn(column, output, cellChecksum);
                rowChecksum = PlainBufferCrc8.crc8(rowChecksum, cellChecksum);
            }

            // 没有deleteMarker, 要与0x0做crc.
            rowChecksum = PlainBufferCrc8.crc8(rowChecksum, (byte)0x0);

            output.WriteRawByte(PlainBufferConsts.TAG_ROW_CHECKSUM);
            output.WriteRawByte(rowChecksum);

            if (!output.IsFull())
            {
                throw new IOException("Bug: serialize primary key failed.");
            }

            return(output.GetBuffer());
        }
Example #2
0
 private void GenerateChecksum()
 {
     this.checksum    = PlainBufferCrc8.GetChecksum((byte)0x0, this);
     this.hasChecksum = true;
 }