pub mod cf_tx_store;
pub mod context;
pub mod internal;
pub mod macros;
pub mod optimistic;
pub mod policies;
pub mod tx_store;
pub mod optimistic_tx_store;
pub mod cf_optimistic_tx_store;
pub mod optimistic_context;
use crate::bytes::AsBytes;
use super::error::{StoreError, StoreResult};
use super::serialization; use super::types::MergeValue;
use rocksdb::{
Transaction,
TransactionDB,
WriteBatchWithTransaction, };
use serde::{de::DeserializeOwned, Serialize};
use std::fmt::Debug;
use std::hash::Hash;
pub use tx_store::RocksDbTxnStore;
pub use cf_tx_store::RocksDbCFTxnStore;
pub use context::TransactionContext;
pub use optimistic_context::OptimisticTransactionContext;
pub use optimistic::{RetryPolicy};
pub use policies::{FixedRetry, NoRetry,};
pub type WriteBatchTransaction = WriteBatchWithTransaction<true>;
pub type Tx<'a> = Transaction<'a, TransactionDB>;
pub fn commit_transaction(txn: Tx) -> StoreResult<()> {
txn.commit().map_err(StoreError::RocksDb)
}
pub fn rollback_transaction(txn: Tx) -> StoreResult<()> {
txn.rollback().map_err(StoreError::RocksDb)
}
pub fn get_in_txn<Key, Val>(txn: &Tx, key: Key) -> StoreResult<Option<Val>>
where
Key: AsBytes + Hash + Eq + PartialEq + Debug,
Val: DeserializeOwned + Debug,
{
let sk = serialization::serialize_key(key)?;
match txn.get_pinned(sk) {
Ok(Some(pv)) => serialization::deserialize_value(&pv).map(Some),
Ok(None) => Ok(None),
Err(e) => Err(StoreError::RocksDb(e)),
}
}
pub fn merge_in_txn<Key, PatchVal>(
txn: &Tx,
key: Key,
merge_value: &MergeValue<PatchVal>,
) -> StoreResult<()>
where
Key: AsBytes + Hash + Eq + PartialEq + Debug,
PatchVal: Serialize + Debug,
{
let sk = serialization::serialize_key(key)?;
let smo = serialization::serialize_value(merge_value)?;
txn.merge(sk, smo).map_err(StoreError::RocksDb)
}
pub fn remove_in_txn<Key>(txn: &Tx, key: Key) -> StoreResult<()>
where
Key: AsBytes + Hash + Eq + PartialEq + Debug,
{
let sk = serialization::serialize_key(key)?;
txn.delete(sk).map_err(StoreError::RocksDb)
}