[][src]Module ckb_rocksdb::merge_operator

rustic merge operator

use ckb_rocksdb::{prelude::*, MergeOperands};

fn concat_merge(new_key: &[u8],
                existing_val: Option<&[u8]>,
                operands: &mut MergeOperands)
                -> Option<Vec<u8>> {

   let mut result: Vec<u8> = Vec::with_capacity(operands.size_hint().0);
   existing_val.map(|v| {
       for e in v {
           result.push(*e)
       }
   });
   for op in operands {
       for e in op {
           result.push(*e)
       }
   }
   Some(result)
}

fn main() {
  let path = "_rust_path_to_rocksdb";
  let mut opts = Options::default();
  opts.create_if_missing(true);
  opts.set_merge_operator("test operator", concat_merge, None);
  let db = DB::open(&opts, &path).unwrap();
  let p = db.put(b"k1", b"a");
  db.merge(b"k1", b"b");
  db.merge(b"k1", b"c");
  db.merge(b"k1", b"d");
  db.merge(b"k1", b"efg");
  let r = db.get(b"k1");
  assert!(r.unwrap().unwrap().to_utf8().unwrap() == "abcdefg");
}

Structs

MergeOperands
MergeOperatorCallback

Functions

destructor_callback
full_merge_callback
name_callback
partial_merge_callback

Type Definitions

MergeFn