From 8a5201542224489b731ce08583375e3874aa3d5e Mon Sep 17 00:00:00 2001 From: Brian Grinstead Date: Fri, 6 Jan 2017 10:24:04 -0600 Subject: [PATCH] Take on rusqlite dependency. Fixes #148. r=rnewman --- Cargo.toml | 2 ++ src/lib.rs | 13 ++++++------- tests/external_test.rs | 44 +++++++++++++++++++++++++++++++++++++++--- 3 files changed, 49 insertions(+), 10 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index b0ec7ca3..5fc8c42b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,8 @@ version = "0.4.0" authors = ["Richard Newman ", "Nicholas Alexander "] [dependencies] +rusqlite = "0.8.0" + [dependencies.datomish-query-parser] path = "query-parser" diff --git a/src/lib.rs b/src/lib.rs index 2c4086f2..e259b8d8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,6 +9,9 @@ // specific language governing permissions and limitations under the License. extern crate datomish_query_parser; +extern crate rusqlite; + +use rusqlite::Connection; pub fn get_name() -> String { return String::from("datomish"); @@ -19,19 +22,15 @@ pub fn get_parser_name() -> String { return datomish_query_parser::get_name(); } -pub fn add_two(a: i32) -> i32 { - a + 2 +// Will ultimately not return the sqlite connection directly +pub fn get_connection() -> Connection { + return Connection::open_in_memory().unwrap(); } #[cfg(test)] mod tests { use super::*; - #[test] - fn it_works() { - assert_eq!(4, add_two(2)); - } - #[test] fn can_import_parser() { assert_eq!(String::from("datomish-query-parser"), get_parser_name()); diff --git a/tests/external_test.rs b/tests/external_test.rs index ea8ff658..13c65dee 100644 --- a/tests/external_test.rs +++ b/tests/external_test.rs @@ -11,6 +11,44 @@ extern crate datomish; #[test] -fn external_test() { - assert_eq!(4, datomish::add_two(2)); -} \ No newline at end of file +fn can_import_sqlite() { + // From https://github.com/jgallagher/rusqlite#rusqlite. + #[derive(Debug)] + struct Person { + id: i32, + name: String, + data: Option> + } + + let conn = datomish::get_connection(); + + conn.execute("CREATE TABLE person ( + id INTEGER PRIMARY KEY, + name TEXT NOT NULL, + data BLOB + )", &[]).unwrap(); + let me = Person { + id: 1, + name: "Steven".to_string(), + data: None + }; + conn.execute("INSERT INTO person (name, data) + VALUES (?1, ?2)", + &[&me.name, &me.data]).unwrap(); + + let mut stmt = conn.prepare("SELECT id, name, data FROM person").unwrap(); + let person_iter = stmt.query_map(&[], |row| { + Person { + id: row.get(0), + name: row.get(1), + data: row.get(2) + } + }).unwrap(); + + for person in person_iter { + let p = person.unwrap(); + assert_eq!(me.id, p.id); + assert_eq!(me.data, p.data); + assert_eq!(me.data, p.data); + } +}