|
|
|
@ -22,6 +22,7 @@ use std::collections::BTreeMap; |
|
|
|
|
use std::ffi::{CStr, CString}; |
|
|
|
|
use std::fmt; |
|
|
|
|
use std::fs; |
|
|
|
|
use std::iter; |
|
|
|
|
use std::marker::PhantomData; |
|
|
|
|
use std::ops::Deref; |
|
|
|
|
use std::path::Path; |
|
|
|
@ -660,28 +661,37 @@ impl DB { |
|
|
|
|
|
|
|
|
|
/// Open the database with the specified options.
|
|
|
|
|
pub fn open<P: AsRef<Path>>(opts: &Options, path: P) -> Result<DB, Error> { |
|
|
|
|
DB::open_cf(opts, path, &[]) |
|
|
|
|
DB::open_cf(opts, path, iter::empty::<&str>()) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// Open a database with the given database options and column family names.
|
|
|
|
|
///
|
|
|
|
|
/// Column families opened using this function will be created with default `Options`.
|
|
|
|
|
pub fn open_cf<P: AsRef<Path>>(opts: &Options, path: P, cfs: &[&str]) -> Result<DB, Error> { |
|
|
|
|
let cfs_v = cfs |
|
|
|
|
.to_vec() |
|
|
|
|
.iter() |
|
|
|
|
.map(|name| ColumnFamilyDescriptor::new(*name, Options::default())) |
|
|
|
|
.collect(); |
|
|
|
|
pub fn open_cf<P, I, N>(opts: &Options, path: P, cfs: I) -> Result<DB, Error>
|
|
|
|
|
where P: AsRef<Path>, |
|
|
|
|
I: IntoIterator<Item = N>, |
|
|
|
|
N: AsRef<str> { |
|
|
|
|
|
|
|
|
|
let cfs = cfs |
|
|
|
|
.into_iter() |
|
|
|
|
.map(|name| ColumnFamilyDescriptor::new(name.as_ref(), Options::default())); |
|
|
|
|
|
|
|
|
|
DB::open_cf_descriptors(opts, path, cfs_v) |
|
|
|
|
DB::open_cf_descriptors(opts, path, cfs) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// Open a database with the given database options and column family names/options.
|
|
|
|
|
pub fn open_cf_descriptors<P: AsRef<Path>>( |
|
|
|
|
pub fn open_cf_descriptors<P, I>( |
|
|
|
|
opts: &Options, |
|
|
|
|
path: P, |
|
|
|
|
cfs: Vec<ColumnFamilyDescriptor>, |
|
|
|
|
) -> Result<DB, Error> { |
|
|
|
|
cfs: I, |
|
|
|
|
) -> Result<DB, Error>
|
|
|
|
|
where P: AsRef<Path>, |
|
|
|
|
I: IntoIterator<Item = ColumnFamilyDescriptor> { |
|
|
|
|
|
|
|
|
|
let cfs: Vec<_> = cfs |
|
|
|
|
.into_iter() |
|
|
|
|
.collect(); |
|
|
|
|
|
|
|
|
|
let path = path.as_ref(); |
|
|
|
|
let cpath = match CString::new(path.to_string_lossy().as_bytes()) { |
|
|
|
|
Ok(c) => c, |
|
|
|
|