use std::sync::Arc;
#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum LockKey {
Surrogate {
collection: Arc<str>,
surrogate: u32,
},
Kv {
collection: Arc<str>,
key: Arc<[u8]>,
},
Edge {
collection: Arc<str>,
src: u32,
dst: u32,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub struct TxnId {
pub epoch: u64,
pub position: u32,
}
impl TxnId {
pub const AUTOCOMMIT_EPOCH: u64 = u64::MAX;
pub fn new(epoch: u64, position: u32) -> Self {
Self { epoch, position }
}
pub fn is_autocommit(&self) -> bool {
self.epoch == Self::AUTOCOMMIT_EPOCH
}
pub const RESERVATION_POSITION_BAND: u32 = 1 << 31;
pub fn is_reservation(&self) -> bool {
self.position >= Self::RESERVATION_POSITION_BAND
}
}