use super::TransactionContext;
use crate::error::TransactionError;
use crate::types::*;
use linkrs_core::types::VertexId;
impl TransactionContext {
pub fn get_write_set(&self) -> WriteSet {
self.write_set.lock().clone()
}
pub fn is_write_set_empty(&self) -> bool {
self.write_set.lock().is_empty()
}
pub fn write_set_size(&self) -> usize {
self.write_set.lock().size()
}
pub fn mark_write_validated(&self) {
self.write_validated.store(true);
}
pub fn is_write_validated(&self) -> bool {
self.write_validated.load()
}
pub fn has_write_conflict_with(&self, other: &TransactionContext) -> bool {
let ws1 = self.write_set.lock();
let ws2 = other.write_set.lock();
ws1.has_conflict_with(&ws2)
}
pub fn get_read_set(&self) -> WriteSet {
self.read_set.lock().clone()
}
pub fn record_vertex_read(&self, vid: VertexId) {
self.read_set.lock().record_vertex(vid);
}
pub fn record_edge_read(&self, edge: linkrs_core::types::EdgeIdentifier) {
self.read_set.lock().record_edge(edge);
}
pub fn record_schema_read(&self, resource: &str) {
self.read_set.lock().record_schema_resource(resource);
}
pub fn record_index_read(&self, resource: &str) {
self.read_set.lock().record_index_resource(resource);
}
pub fn record_read_range(&self, range: ReadRange) {
self.read_set.lock().record_read_range(range);
}
pub fn record_vertex_write(&self, vid: VertexId) {
self.write_set.lock().record_vertex(vid);
}
pub fn record_vertex_delete(&self, vid: VertexId) {
self.write_set.lock().record_vertex_delete(vid);
}
pub fn record_edge_write(&self, edge: linkrs_core::types::EdgeIdentifier) {
self.write_set.lock().record_edge(edge);
}
pub fn record_schema_write(&self, resource: &str) -> Result<(), TransactionError> {
self.write_set.lock().record_schema_resource(resource);
Ok(())
}
pub fn record_index_write(&self, resource: &str) {
self.write_set.lock().record_index_resource(resource);
}
pub fn has_local_vertex_write(&self, vid: &VertexId) -> bool {
self.write_set.lock().covers_vertex(vid)
}
pub fn has_local_edge_write(&self, edge: &linkrs_core::types::EdgeIdentifier) -> bool {
self.write_set.lock().covers_edge(edge)
}
pub fn restore_write_set(&self, write_set: WriteSet) {
*self.write_set.lock() = write_set;
self.write_validated.store(false);
}
pub fn restore_read_set(&self, read_set: WriteSet) {
*self.read_set.lock() = read_set;
}
pub fn clear_write_validation(&self) {
self.write_validated.store(false);
}
}