[][src]Module exonum_rocksdb::merge_operator

rustic merge operator

This example is not tested
extern crate tempdir;
extern crate exonum_rocksdb;

use exonum_rocksdb::{Options, DB, MergeOperands};
use tempdir::TempDir;

fn concat_merge(_: &[u8],
                existing_val: Option<&[u8]>,
                operands: &mut MergeOperands)
                -> 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)
       }
   }
   result
}

fn main() {
   let temp_dir = TempDir::new("rocksdb").unwrap();
   let path = temp_dir.path();
   let mut opts = Options::default();
   opts.create_if_missing(true);
   opts.set_merge_operator("test operator", concat_merge);
   let db = DB::open(&opts, path).unwrap();
   let _ = db.put(b"k1", b"a");
   let _ = db.merge(b"k1", b"b");
   let _ = db.merge(b"k1", b"c");
   let _ = db.merge(b"k1", b"d");
   let _ = 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