public static void writePrimaryKeyValue()

in tablestore/src/main/java/com/alicloud/openservices/tablestore/core/protocol/PlainBufferBuilder.java [226:273]


    public static void writePrimaryKeyValue(PrimaryKeyValue value, PlainBufferOutputStream output) throws IOException {
        if (value.isInfMin()) {
            output.writeRawLittleEndian32(1);
            output.writeRawByte(PlainBufferConsts.VT_INF_MIN);
            return;
        }

        if (value.isInfMax()) {
            output.writeRawLittleEndian32(1);
            output.writeRawByte(PlainBufferConsts.VT_INF_MAX);
            return;
        }
        
        if (value.isPlaceHolderForAutoIncr()) {
            output.writeRawLittleEndian32(1);
            output.writeRawByte(PlainBufferConsts.VT_AUTO_INCREMENT);
            return;
        }

        switch (value.getType()) {
            case STRING: {
                byte[] rawData = value.asStringInBytes();
                final int prefixLength = PlainBufferOutputStream.LITTLE_ENDIAN_32_SIZE + 1; // length + type + length
                output.writeRawLittleEndian32(prefixLength + rawData.length); // length + type + value
                output.writeRawByte(PlainBufferConsts.VT_STRING);
                output.writeRawLittleEndian32(rawData.length);
                output.writeBytes(rawData);
                break;
            }
            case INTEGER: {
                output.writeRawLittleEndian32(1 + PlainBufferOutputStream.LITTLE_ENDIAN_64_SIZE);
                output.writeRawByte(PlainBufferConsts.VT_INTEGER);
                output.writeRawLittleEndian64(value.asLong());
                break;
            }
            case BINARY: {
                byte[] rawData = value.asBinary();
                final int prefixLength = PlainBufferOutputStream.LITTLE_ENDIAN_32_SIZE + 1; // length + type + length
                output.writeRawLittleEndian32(prefixLength + rawData.length); // length + type + value
                output.writeRawByte(PlainBufferConsts.VT_BLOB);
                output.writeRawLittleEndian32(rawData.length);
                output.writeBytes(rawData);
                break;
            }
            default:
                throw new IOException("Bug: unsupported primary key type: " + value.getType());
        }
    }