main
Ziyang Hu 2 years ago
parent fa78f1bc67
commit 1d93422776

@ -37,6 +37,7 @@ impl Display for BridgeError {
impl std::error::Error for BridgeError {}
impl Default for BridgeStatus {
#[inline]
fn default() -> Self {
BridgeStatus {
code: StatusCode::kOk,
@ -48,6 +49,7 @@ impl Default for BridgeStatus {
}
impl BridgeStatus {
#[inline]
fn check_err<T>(self, data: T) -> Result<T> {
let err: Option<BridgeError> = self.into();
match err {
@ -58,6 +60,7 @@ impl BridgeStatus {
}
impl From<BridgeStatus> for Option<BridgeError> {
#[inline]
fn from(s: BridgeStatus) -> Self {
if s.severity == StatusSeverity::kNoError && s.bridge_code == StatusBridgeCode::OK {
None
@ -74,12 +77,14 @@ pub trait SlicePtr {
}
impl SlicePtr for UniquePtr<Slice> {
#[inline]
fn as_bytes(&self) -> &[u8] {
convert_slice_back(self)
}
}
impl SlicePtr for UniquePtr<PinnableSlice> {
#[inline]
fn as_bytes(&self) -> &[u8] {
convert_pinnable_slice_back(self)
}
@ -88,6 +93,7 @@ impl SlicePtr for UniquePtr<PinnableSlice> {
pub struct RustComparatorPtr(UniquePtr<RustComparator>);
impl RustComparatorPtr {
#[inline]
pub fn new(name: &str, cmp: fn(&[u8], &[u8]) -> i8) -> Self {
Self(new_rust_comparator(name, cmp))
}
@ -96,6 +102,7 @@ impl RustComparatorPtr {
impl Deref for RustComparatorPtr {
type Target = UniquePtr<RustComparator>;
#[inline]
fn deref(&self) -> &Self::Target {
&self.0
}
@ -105,37 +112,46 @@ pub struct OptionsPtr(UniquePtr<Options>);
impl Deref for OptionsPtr {
type Target = UniquePtr<Options>;
#[inline]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl DerefMut for OptionsPtr {
#[inline]
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
impl OptionsPtr {
#[inline]
pub fn default() -> Self {
Self(new_options())
}
#[inline]
pub fn prepare_for_bulk_load(&mut self) -> &mut Self {
prepare_for_bulk_load(self.pin_mut());
self
}
#[inline]
pub fn increase_parallelism(&mut self) -> &mut Self {
increase_parallelism(self.pin_mut());
self
}
#[inline]
pub fn optimize_level_style_compaction(&mut self) -> &mut Self {
optimize_level_style_compaction(self.pin_mut());
self
}
#[inline]
pub fn set_create_if_missing(&mut self, v: bool) -> &mut Self {
set_create_if_missing(self.pin_mut(), v);
self
}
#[inline]
pub fn set_comparator(&mut self, cmp: &RustComparatorPtr) -> &mut Self {
set_comparator(self.pin_mut(), cmp);
self
@ -148,12 +164,14 @@ pub struct ReadOptionsPtr(UniquePtr<ReadOptions>);
impl Deref for ReadOptionsPtr {
type Target = UniquePtr<ReadOptions>;
#[inline]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl DerefMut for ReadOptionsPtr {
#[inline]
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
@ -161,13 +179,16 @@ impl DerefMut for ReadOptionsPtr {
impl ReadOptionsPtr {
#[inline]
pub fn default() -> Self {
Self(new_read_options())
}
#[inline]
pub fn set_verify_checksums(&mut self, v: bool) -> &mut Self {
set_verify_checksums(self.pin_mut(), v);
self
}
#[inline]
pub fn set_total_order_seek(&mut self, v: bool) -> &mut Self {
set_total_order_seek(self.pin_mut(), v);
self
@ -178,21 +199,26 @@ pub struct WriteOptionsPtr(UniquePtr<WriteOptions>);
impl Deref for WriteOptionsPtr {
type Target = UniquePtr<WriteOptions>;
#[inline]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl DerefMut for WriteOptionsPtr {
#[inline]
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
impl WriteOptionsPtr {
#[inline]
pub fn default() -> Self {
Self(new_write_options())
}
#[inline]
pub fn set_disable_wal(&mut self, v: bool) -> &mut Self {
set_disable_wal(self.pin_mut(), v);
self
@ -203,21 +229,26 @@ pub struct TransactionOptionsPtr(UniquePtr<TransactionOptions>);
impl Deref for TransactionOptionsPtr {
type Target = UniquePtr<TransactionOptions>;
#[inline]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl DerefMut for TransactionOptionsPtr {
#[inline]
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
impl TransactionOptionsPtr {
#[inline]
pub fn default() -> Self {
Self(new_transaction_options())
}
#[inline]
pub fn set_deadlock_detect(&mut self, v: bool) -> &mut Self {
set_deadlock_detect(self.pin_mut(), v);
self
@ -229,18 +260,21 @@ pub struct OptimisticTransactionOptionsPtr(UniquePtr<OptimisticTransactionOption
impl Deref for OptimisticTransactionOptionsPtr {
type Target = UniquePtr<OptimisticTransactionOptions>;
#[inline]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl DerefMut for OptimisticTransactionOptionsPtr {
#[inline]
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
impl OptimisticTransactionOptionsPtr {
#[inline]
pub fn new(cmp: &RustComparatorPtr) -> Self {
Self(new_optimistic_transaction_options(cmp))
}
@ -250,18 +284,22 @@ pub struct TransactionDBOptionsPtr(UniquePtr<TransactionDBOptions>);
impl Deref for TransactionDBOptionsPtr {
type Target = UniquePtr<TransactionDBOptions>;
#[inline]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl DerefMut for TransactionDBOptionsPtr {
#[inline]
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
impl TransactionDBOptionsPtr {
#[inline]
pub fn default() -> Self {
Self(new_tdb_options())
}
@ -271,18 +309,22 @@ pub struct OptimisticTransactionDBOptionsPtr(UniquePtr<OptimisticTransactionDBOp
impl Deref for OptimisticTransactionDBOptionsPtr {
type Target = UniquePtr<OptimisticTransactionDBOptions>;
#[inline]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl DerefMut for OptimisticTransactionDBOptionsPtr {
#[inline]
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}
impl OptimisticTransactionDBOptionsPtr {
#[inline]
pub fn default() -> Self {
Self(new_odb_options())
}
@ -292,42 +334,55 @@ pub struct IteratorPtr(UniquePtr<IteratorBridge>);
impl Deref for IteratorPtr {
type Target = UniquePtr<IteratorBridge>;
#[inline]
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl IteratorPtr {
#[inline]
pub fn to_first(&self) {
IteratorBridge::seek_to_first(self)
}
#[inline]
pub fn to_last(&self) {
IteratorBridge::seek_to_last(self)
}
#[inline]
pub fn next(&self) {
IteratorBridge::next(self)
}
#[inline]
pub fn is_valid(&self) -> bool {
IteratorBridge::is_valid(self)
}
#[inline]
pub fn seek(&self, key: impl AsRef<[u8]>) {
IteratorBridge::do_seek(self, key.as_ref())
}
#[inline]
pub fn seek_for_prev(&self, key: impl AsRef<[u8]>) {
IteratorBridge::do_seek_for_prev(self, key.as_ref())
}
#[inline]
pub fn key(&self) -> UniquePtr<Slice> {
IteratorBridge::key_raw(self)
}
#[inline]
pub fn val(&self) -> UniquePtr<Slice> {
IteratorBridge::value_raw(self)
}
#[inline]
pub fn status(&self) -> BridgeStatus {
IteratorBridge::status(self)
}
#[inline]
pub fn iter(&self) -> KVIterator {
KVIterator { it: self }
}
#[inline]
pub fn keys(&self) -> KeyIterator {
KeyIterator { it: self }
}
@ -339,6 +394,7 @@ pub struct KVIterator<'a> {
impl Iterator for KVIterator<'_> {
type Item = (UniquePtr<Slice>, UniquePtr<Slice>);
#[inline]
fn next(&mut self) -> Option<Self::Item> {
if self.it.is_valid() {
let ret = (self.it.key(), self.it.val());
@ -357,6 +413,7 @@ pub struct KeyIterator<'a> {
impl Iterator for KeyIterator<'_> {
type Item = UniquePtr<Slice>;
#[inline]
fn next(&mut self) -> Option<Self::Item> {
if self.it.is_valid() {
let ret = self.it.key();
@ -372,6 +429,7 @@ pub struct TransactionPtr(UniquePtr<TransactionBridge>);
impl Deref for TransactionPtr {
type Target = UniquePtr<TransactionBridge>;
#[inline]
fn deref(&self) -> &Self::Target {
&self.0
}
@ -379,32 +437,39 @@ impl Deref for TransactionPtr {
impl TransactionPtr {
#[inline]
pub fn set_snapshot(&self) {
TransactionBridge::set_snapshot(self)
}
#[inline]
pub fn commit(&self) -> Result<()> {
let mut status = BridgeStatus::default();
TransactionBridge::commit(self, &mut status);
status.check_err(())
}
#[inline]
pub fn rollback(&self) -> Result<()> {
let mut status = BridgeStatus::default();
TransactionBridge::rollback(self, &mut status);
status.check_err(())
}
#[inline]
pub fn set_savepoint(&self) {
TransactionBridge::set_savepoint(self);
}
#[inline]
pub fn rollback_to_savepoint(&self) -> Result<()> {
let mut status = BridgeStatus::default();
TransactionBridge::rollback_to_savepoint(self, &mut status);
status.check_err(())
}
#[inline]
pub fn pop_savepoint(&self) -> Result<()> {
let mut status = BridgeStatus::default();
TransactionBridge::pop_savepoint(self, &mut status);
status.check_err(())
}
#[inline]
pub fn get(&self, transact: bool, cf: &ColumnFamilyHandle, key: impl AsRef<[u8]>) -> Result<UniquePtr<PinnableSlice>> {
let mut status = BridgeStatus::default();
if transact {
@ -415,11 +480,13 @@ impl TransactionPtr {
status.check_err(ret)
}
}
#[inline]
pub fn get_for_update(&self, cf: &ColumnFamilyHandle, key: impl AsRef<[u8]>) -> Result<UniquePtr<PinnableSlice>> {
let mut status = BridgeStatus::default();
let ret = self.get_for_update_txn(cf, key.as_ref(), &mut status);
status.check_err(ret)
}
#[inline]
pub fn del(&self, transact: bool, cf: &ColumnFamilyHandle, key: impl AsRef<[u8]>) -> Result<()> {
let mut status = BridgeStatus::default();
if transact {
@ -430,6 +497,7 @@ impl TransactionPtr {
status.check_err(ret)
}
}
#[inline]
pub fn put(&self, transact: bool, cf: &ColumnFamilyHandle, key: impl AsRef<[u8]>, val: impl AsRef<[u8]>) -> Result<()> {
let mut status = BridgeStatus::default();
if transact {
@ -440,6 +508,7 @@ impl TransactionPtr {
status.check_err(ret)
}
}
#[inline]
pub fn iterator(&self, transact: bool, cf: &ColumnFamilyHandle) -> IteratorPtr {
if transact {
IteratorPtr(self.iterator_txn(cf))
@ -454,6 +523,7 @@ pub struct DBPtr(UniquePtr<TDBBridge>);
impl Deref for DBPtr {
type Target = UniquePtr<TDBBridge>;
#[inline]
fn deref(&self) -> &Self::Target {
&self.0
}
@ -483,6 +553,7 @@ impl DBPtr {
status.check_err(Self(ret))
}
#[inline]
pub fn make_transaction(&self,
options: TransactOption,
read_ops: ReadOptionsPtr,
@ -511,7 +582,7 @@ impl DBPtr {
}
})
}
#[inline]
pub fn get_cf(&self, name: impl AsRef<str>) -> Option<SharedPtr<ColumnFamilyHandle>> {
let_cxx_string!(cname = name.as_ref());
let spt = self.get_cf_handle_raw(&cname);
@ -521,21 +592,21 @@ impl DBPtr {
Some(spt)
}
}
#[inline]
pub fn create_cf(&self, options: &OptionsPtr, name: impl AsRef<str>) -> Result<()> {
let_cxx_string!(name = name.as_ref());
let mut status = BridgeStatus::default();
self.create_column_family_raw(options, &name, &mut status);
status.check_err(())
}
#[inline]
pub fn drop_cf(&self, name: impl AsRef<str>) -> Result<()> {
let_cxx_string!(name = name.as_ref());
let mut status = BridgeStatus::default();
self.drop_column_family_raw(&name, &mut status);
status.check_err(())
}
#[inline]
pub fn cf_names(&self) -> Vec<String> {
self.get_column_family_names_raw().iter().map(|v| v.to_string_lossy().to_string()).collect()
}

Loading…
Cancel
Save