use reifydb_core::{
interface::catalog::id::{PrimaryKeyId, RingBufferId},
key::ringbuffer::RingBufferKey,
};
use reifydb_transaction::transaction::Transaction;
use crate::{CatalogStore, Result, store::ringbuffer::shape::ringbuffer};
impl CatalogStore {
pub(crate) fn get_ringbuffer_pk_id(
rx: &mut Transaction<'_>,
ringbuffer_id: RingBufferId,
) -> Result<Option<PrimaryKeyId>> {
let multi = match rx.get(&RingBufferKey::encoded(ringbuffer_id))? {
Some(v) => v,
None => return Ok(None),
};
let pk_id = ringbuffer::SHAPE.get_u64(&multi.row, ringbuffer::PRIMARY_KEY);
if pk_id == 0 {
Ok(None)
} else {
Ok(Some(PrimaryKeyId(pk_id)))
}
}
}
#[cfg(test)]
pub mod tests {
use reifydb_core::interface::catalog::id::{PrimaryKeyId, RingBufferId};
use reifydb_engine::test_harness::create_test_admin_transaction;
use reifydb_transaction::transaction::Transaction;
use crate::{CatalogStore, test_utils::ensure_test_ringbuffer};
#[test]
fn test_get_ringbuffer_pk_id_without_primary_key() {
let mut txn = create_test_admin_transaction();
let ringbuffer = ensure_test_ringbuffer(&mut txn);
let pk_id =
CatalogStore::get_ringbuffer_pk_id(&mut Transaction::Admin(&mut txn), ringbuffer.id).unwrap();
assert_eq!(pk_id, None);
}
#[test]
fn test_get_ringbuffer_pk_id_with_primary_key() {
let mut txn = create_test_admin_transaction();
let ringbuffer = ensure_test_ringbuffer(&mut txn);
let pk_id = PrimaryKeyId(42);
CatalogStore::set_ringbuffer_primary_key(&mut txn, ringbuffer.id, pk_id).unwrap();
let retrieved_pk =
CatalogStore::get_ringbuffer_pk_id(&mut Transaction::Admin(&mut txn), ringbuffer.id).unwrap();
assert_eq!(retrieved_pk, Some(pk_id));
}
#[test]
fn test_get_ringbuffer_pk_id_nonexistent_ringbuffer() {
let mut txn = create_test_admin_transaction();
let pk_id = CatalogStore::get_ringbuffer_pk_id(&mut Transaction::Admin(&mut txn), RingBufferId(999))
.unwrap();
assert_eq!(pk_id, None);
}
}