use std::collections::HashSet;
use super::TransactionContext;
use crate::wal::Timestamp;
impl TransactionContext {
pub fn effective_read_timestamp(&self) -> Timestamp {
self.refreshed_read_ts
.read()
.map(|refreshed| refreshed.max(self.start_timestamp))
.unwrap_or(self.start_timestamp)
}
pub fn set_refreshed_read_ts(&self, ts: Timestamp) {
*self.refreshed_read_ts.write() = Some(ts);
}
pub fn set_statement_snapshot_pin(&self, ts: Timestamp) -> Option<Timestamp> {
self.statement_snapshot_pin.write().replace(ts)
}
pub fn take_statement_snapshot_pin(&self) -> Option<Timestamp> {
self.statement_snapshot_pin.write().take()
}
pub fn serializable_full_scan_threshold(&self) -> Option<usize> {
self.serializable_full_scan_threshold
}
pub fn record_ssi_read(&self, resource: crate::types::ResourceId) {
self.ssi_state.write().record_read(resource);
}
pub fn record_ssi_write(&self, resource: crate::types::ResourceId) {
self.ssi_state.write().record_write(resource);
}
pub fn get_ssi_read_resources(&self) -> HashSet<crate::types::ResourceId> {
self.ssi_state.read().read_resources().clone()
}
pub fn get_ssi_write_resources(&self) -> HashSet<crate::types::ResourceId> {
self.ssi_state.read().write_resources().clone()
}
pub fn clear_ssi_state(&self) {
let mut state = self.ssi_state.write();
*state = crate::types::SsiState::new();
}
}