risingwave_storage/row_serde/
row_serde_util.rs1use bytes::{BufMut, Bytes, BytesMut};
16use risingwave_common::hash::VirtualNode;
17use risingwave_common::row::{OwnedRow, Row};
18use risingwave_common::util::row_serde::OrderedRowSerde;
19use risingwave_hummock_sdk::key::TableKey;
20
21pub fn serialize_row(row: impl Row, serializer: &OrderedRowSerde) -> Bytes {
22 let mut buf = BytesMut::with_capacity(row.len());
23 row.memcmp_serialize_into(serializer, &mut buf);
24 buf.freeze()
25}
26
27pub fn serialize_pk(pk: impl Row, serializer: &OrderedRowSerde) -> Bytes {
28 serialize_row(pk, serializer)
29}
30
31pub fn serialize_pk_with_vnode(
32 pk: impl Row,
33 serializer: &OrderedRowSerde,
34 vnode: VirtualNode,
35) -> TableKey<Bytes> {
36 let mut buffer = BytesMut::new();
37 buffer.put_slice(&vnode.to_be_bytes()[..]);
38 pk.memcmp_serialize_into(serializer, &mut buffer);
39 TableKey(buffer.freeze())
40}
41
42pub fn deserialize_pk_with_vnode(
43 key: &[u8],
44 deserializer: &OrderedRowSerde,
45) -> memcomparable::Result<(VirtualNode, OwnedRow)> {
46 let vnode = VirtualNode::from_be_bytes(key[0..VirtualNode::SIZE].try_into().unwrap());
47 let pk = deserializer.deserialize(&key[VirtualNode::SIZE..])?;
48 Ok((vnode, pk))
49}