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)