MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / encode_pk

Function encode_pk

nodedb-columnar/src/pk_index.rs:171–187  ·  view source on GitHub ↗

Encode a PK value into sortable bytes. Uses big-endian XOR encoding for signed integers (preserves sort order), raw UTF-8 for strings, raw bytes for UUIDs.

(value: &nodedb_types::value::Value)

Source from the content-addressed store, hash-verified

169/// Uses big-endian XOR encoding for signed integers (preserves sort order),
170/// raw UTF-8 for strings, raw bytes for UUIDs.
171pub fn encode_pk(value: &nodedb_types::value::Value) -> Vec<u8> {
172 use nodedb_types::value::Value;
173 match value {
174 Value::Integer(v) => {
175 let sortable = (*v as u64) ^ (1u64 << 63);
176 sortable.to_be_bytes().to_vec()
177 }
178 Value::String(s) => s.as_bytes().to_vec(),
179 Value::Uuid(s) => s.as_bytes().to_vec(),
180 Value::Decimal(d) => d.serialize().to_vec(),
181 Value::DateTime(dt) => {
182 let sortable = (dt.micros as u64) ^ (1u64 << 63);
183 sortable.to_be_bytes().to_vec()
184 }
185 _ => format!("{value:?}").into_bytes(),
186 }
187}
188
189/// Encode a composite PK from multiple values.
190pub fn encode_composite_pk(values: &[&nodedb_types::value::Value]) -> Vec<u8> {

Callers 15

encode_composite_pkFunction · 0.85
insert_and_lookupFunction · 0.85
duplicate_pk_rejectedFunction · 0.85
remove_entryFunction · 0.85
bulk_insertFunction · 0.85
remap_segmentFunction · 0.85
remove_segmentFunction · 0.85
serialization_roundtripFunction · 0.85
int_sort_orderFunction · 0.85
deleteMethod · 0.85
extract_pk_bytesMethod · 0.85

Calls 3

to_vecMethod · 0.45
as_bytesMethod · 0.45
serializeMethod · 0.45

Tested by 11

insert_and_lookupFunction · 0.68
duplicate_pk_rejectedFunction · 0.68
remove_entryFunction · 0.68
bulk_insertFunction · 0.68
remap_segmentFunction · 0.68
remove_segmentFunction · 0.68
serialization_roundtripFunction · 0.68
int_sort_orderFunction · 0.68
memtable_flush_remaps_pkFunction · 0.68