1use libc::c_int;
12use std::ptr;
13
14use super::SqliteResult;
15use core::{Access, DatabaseConnection, str_charstar};
16use ffi;
17
18use access::flags::OpenFlags;
19
20#[allow(missing_docs)]
22pub mod flags;
23
24pub fn open(filename: &str, flags: Option<OpenFlags>) -> SqliteResult<DatabaseConnection> {
35 DatabaseConnection::new(
36 ByFilename {
37 filename: filename,
38 flags: flags.unwrap_or_default()
39 })
40}
41
42pub struct ByFilename<'a> {
44 pub filename: &'a str,
46 pub flags: OpenFlags
48}
49
50impl<'a> Access for ByFilename<'a> {
51 fn open(self, db: *mut *mut ffi::sqlite3) -> c_int {
52 let c_filename = str_charstar(self.filename);
53 let flags = self.flags.bits();
54 unsafe { ffi::sqlite3_open_v2(c_filename.as_ptr(), db, flags, ptr::null()) }
55 }
56}
57
58
59
60#[cfg(test)]
61mod tests {
62 use std::default::Default;
63 use super::ByFilename;
64 use core::DatabaseConnection;
65 use std::env::temp_dir;
66
67 #[test]
68 fn open_file_db() {
69 let mut temp_directory = temp_dir();
70 temp_directory.push("db1");
71 let path = temp_directory.into_os_string().into_string().unwrap();
72 DatabaseConnection::new(
73 ByFilename {
74 filename: path.as_ref(), flags: Default::default()
75 })
76 .unwrap();
77 }
78}
79
80