From ef550d6d75f8222bcdbd3eead0b974e882cc1b0d Mon Sep 17 00:00:00 2001 From: Ivan Ukhov Date: Fri, 29 May 2015 14:33:39 -0400 Subject: [PATCH] Return error message from SQLite --- src/lib.rs | 16 +++++++++++++++- tests/lib.rs | 11 +++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/lib.rs b/src/lib.rs index 163e15d..43b914c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -8,10 +8,24 @@ macro_rules! raise( ); macro_rules! success( + ($result:expr, $database:expr) => ( + match $result { + ::raw::SQLITE_OK => {}, + code => match ::Error::last($database) { + Some(error) => return Err(error), + None => return Err(::Error::from(::result::code_from_raw(code))), + }, + } + ); ($result:expr) => ( match $result { ::raw::SQLITE_OK => {}, - code => return Err(::Error::from(::result::code_from_raw(code))), + code => return Err(::Error { + code: ::result::code_from_raw(code), + message: Some(c_str_to_string!(unsafe { + ::raw::sqlite3_errstr(code) + })), + }), } ); ); diff --git a/tests/lib.rs b/tests/lib.rs index af37c95..2f51935 100644 --- a/tests/lib.rs +++ b/tests/lib.rs @@ -55,6 +55,17 @@ fn workflow() { } } +#[test] +fn failure() { + let (path, _directory) = setup(); + let mut database = ok!(sqlite::open(&path)); + match database.execute(":)", None) { + Err(error) => assert_eq!(error.message, + Some(String::from("SQL logic error or missing database"))), + _ => assert!(false), + } +} + fn setup() -> (PathBuf, Directory) { let directory = ok!(Directory::new("sqlite")); (directory.path().join("database.sqlite3"), directory)