use std::{collections::BTreeMap, sync::Arc};
use reifydb_core::{common::CommitVersion, interface::catalog::schema::SchemaId};
use reifydb_runtime::sync::rwlock::RwLock;
pub struct SchemaVersionTracker {
versions: Arc<RwLock<BTreeMap<SchemaId, CommitVersion>>>,
}
impl SchemaVersionTracker {
pub fn new() -> Self {
Self {
versions: Arc::new(RwLock::new(BTreeMap::new())),
}
}
pub fn update(&self, object_id: SchemaId, version: CommitVersion) {
let mut versions = self.versions.write();
versions.entry(object_id)
.and_modify(|v| {
if version.0 > v.0 {
*v = version;
}
})
.or_insert(version);
}
pub fn all(&self) -> BTreeMap<SchemaId, CommitVersion> {
let versions = self.versions.read();
versions.clone()
}
}
impl Default for SchemaVersionTracker {
fn default() -> Self {
Self::new()
}
}