|
|
@ -20,7 +20,7 @@ use pretty_assertions::assert_eq; |
|
|
|
|
|
|
|
|
|
|
|
use rocksdb::{ |
|
|
|
use rocksdb::{ |
|
|
|
perf::get_memory_usage_stats, BlockBasedOptions, BottommostLevelCompaction, Cache, |
|
|
|
perf::get_memory_usage_stats, BlockBasedOptions, BottommostLevelCompaction, Cache, |
|
|
|
CompactOptions, CuckooTableOptions, DBCompactionStyle, DBWithThreadMode, Env, Error, |
|
|
|
CompactOptions, CuckooTableOptions, DBAccess, DBCompactionStyle, DBWithThreadMode, Env, Error, |
|
|
|
FifoCompactOptions, IteratorMode, MultiThreaded, Options, PerfContext, PerfMetric, ReadOptions, |
|
|
|
FifoCompactOptions, IteratorMode, MultiThreaded, Options, PerfContext, PerfMetric, ReadOptions, |
|
|
|
SingleThreaded, SliceTransform, Snapshot, UniversalCompactOptions, |
|
|
|
SingleThreaded, SliceTransform, Snapshot, UniversalCompactOptions, |
|
|
|
UniversalCompactionStopStyle, WriteBatch, DB, |
|
|
|
UniversalCompactionStopStyle, WriteBatch, DB, |
|
|
@ -926,20 +926,59 @@ fn multi_get() { |
|
|
|
|
|
|
|
|
|
|
|
{ |
|
|
|
{ |
|
|
|
let db = DB::open_default(&path).unwrap(); |
|
|
|
let db = DB::open_default(&path).unwrap(); |
|
|
|
|
|
|
|
let initial_snap = db.snapshot(); |
|
|
|
db.put(b"k1", b"v1").unwrap(); |
|
|
|
db.put(b"k1", b"v1").unwrap(); |
|
|
|
|
|
|
|
let k1_snap = db.snapshot(); |
|
|
|
db.put(b"k2", b"v2").unwrap(); |
|
|
|
db.put(b"k2", b"v2").unwrap(); |
|
|
|
|
|
|
|
|
|
|
|
let _ = db.multi_get(&[b"k0"; 40]); |
|
|
|
let _ = db.multi_get(&[b"k0"; 40]); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let assert_values = |values: Vec<_>| { |
|
|
|
|
|
|
|
assert_eq!(3, values.len()); |
|
|
|
|
|
|
|
assert_eq!(values[0], None); |
|
|
|
|
|
|
|
assert_eq!(values[1], Some(b"v1".to_vec())); |
|
|
|
|
|
|
|
assert_eq!(values[2], Some(b"v2".to_vec())); |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
let values = db |
|
|
|
let values = db |
|
|
|
.multi_get(&[b"k0", b"k1", b"k2"]) |
|
|
|
.multi_get(&[b"k0", b"k1", b"k2"]) |
|
|
|
.into_iter() |
|
|
|
.into_iter() |
|
|
|
.map(Result::unwrap) |
|
|
|
.map(Result::unwrap) |
|
|
|
.collect::<Vec<_>>(); |
|
|
|
.collect::<Vec<_>>(); |
|
|
|
assert_eq!(3, values.len()); |
|
|
|
|
|
|
|
assert_eq!(values[0], None); |
|
|
|
assert_values(values); |
|
|
|
assert_eq!(values[1], Some(b"v1".to_vec())); |
|
|
|
|
|
|
|
assert_eq!(values[2], Some(b"v2".to_vec())); |
|
|
|
let values = DBAccess::multi_get_opt(&db, &[b"k0", b"k1", b"k2"], &Default::default()) |
|
|
|
|
|
|
|
.into_iter() |
|
|
|
|
|
|
|
.map(Result::unwrap) |
|
|
|
|
|
|
|
.collect::<Vec<_>>(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assert_values(values); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let values = db |
|
|
|
|
|
|
|
.snapshot() |
|
|
|
|
|
|
|
.multi_get(&[b"k0", b"k1", b"k2"]) |
|
|
|
|
|
|
|
.into_iter() |
|
|
|
|
|
|
|
.map(Result::unwrap) |
|
|
|
|
|
|
|
.collect::<Vec<_>>(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assert_values(values); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let none_values = initial_snap |
|
|
|
|
|
|
|
.multi_get(&[b"k0", b"k1", b"k2"]) |
|
|
|
|
|
|
|
.into_iter() |
|
|
|
|
|
|
|
.map(Result::unwrap) |
|
|
|
|
|
|
|
.collect::<Vec<_>>(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assert_eq!(none_values, vec![None; 3]); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
let k1_only = k1_snap |
|
|
|
|
|
|
|
.multi_get(&[b"k0", b"k1", b"k2"]) |
|
|
|
|
|
|
|
.into_iter() |
|
|
|
|
|
|
|
.map(Result::unwrap) |
|
|
|
|
|
|
|
.collect::<Vec<_>>(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
assert_eq!(k1_only, vec![None, Some(b"v1".to_vec()), None]); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|