use bytes::Bytes;
use kip_db::kernel::lsm::iterator::Iter;
use kip_db::kernel::lsm::mvcc::CheckType;
use kip_db::kernel::lsm::storage::{Config, KipStorage};
use kip_db::kernel::Storage;
use kip_db::KernelError;
use std::collections::Bound;
use tempfile::TempDir;
#[tokio::main]
async fn main() -> Result<(), KernelError> {
let temp_dir = TempDir::new().expect("unable to create temporary working directory");
let config = Config::new(temp_dir.into_path()).enable_level_0_memorization();
let kip_storage = KipStorage::open_with_config(config).await?;
println!("Set KeyValue -> (key_1, value_1)");
kip_storage
.set(
Bytes::copy_from_slice(b"key_1"),
Bytes::copy_from_slice(b"value_1"),
)
.await?;
println!("Set KeyValue -> (key_2, value_2)");
kip_storage
.set(
Bytes::copy_from_slice(b"key_2"),
Bytes::copy_from_slice(b"value_2"),
)
.await?;
println!("Set KeyValue -> (key_3, value_3)");
kip_storage
.set(
Bytes::copy_from_slice(b"key_3"),
Bytes::copy_from_slice(b"value_3"),
)
.await?;
println!("New Transaction");
let tx = kip_storage.new_transaction(CheckType::Optimistic).await;
println!("Iter without key_3 By Transaction:");
let mut iter = tx.iter(Bound::Unbounded, Bound::Excluded(b"key_3"))?;
while let Some(item) = iter.try_next()? {
println!("Item: {:?}", item);
}
Ok(())
}