mirror of
https://github.com/isar/rusqlite.git
synced 2025-08-22 22:34:28 +08:00
Merge remote-tracking branch 'jgallagher/master' into chrono
This commit is contained in:
@@ -102,9 +102,10 @@ raw_to_impl!(c_double, sqlite3_bind_double);
|
||||
|
||||
impl ToSql for bool {
|
||||
unsafe fn bind_parameter(&self, stmt: *mut sqlite3_stmt, col: c_int) -> c_int {
|
||||
match *self {
|
||||
true => ffi::sqlite3_bind_int(stmt, col, 1),
|
||||
_ => ffi::sqlite3_bind_int(stmt, col, 0),
|
||||
if *self {
|
||||
ffi::sqlite3_bind_int(stmt, col, 1)
|
||||
} else {
|
||||
ffi::sqlite3_bind_int(stmt, col, 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -222,7 +223,7 @@ impl FromSql for String {
|
||||
unsafe fn column_result(stmt: *mut sqlite3_stmt, col: c_int) -> Result<String> {
|
||||
let c_text = ffi::sqlite3_column_text(stmt, col);
|
||||
if c_text.is_null() {
|
||||
Ok("".to_string())
|
||||
Ok("".to_owned())
|
||||
} else {
|
||||
let c_slice = CStr::from_ptr(c_text as *const c_char).to_bytes();
|
||||
let utf8_str = try!(str::from_utf8(c_slice));
|
||||
@@ -260,7 +261,7 @@ impl<T: FromSql> FromSql for Option<T> {
|
||||
if sqlite3_column_type(stmt, col) == ffi::SQLITE_NULL {
|
||||
Ok(None)
|
||||
} else {
|
||||
FromSql::column_result(stmt, col).map(|t| Some(t))
|
||||
FromSql::column_result(stmt, col).map(Some)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -289,11 +290,11 @@ pub enum Value {
|
||||
impl FromSql for Value {
|
||||
unsafe fn column_result(stmt: *mut sqlite3_stmt, col: c_int) -> Result<Value> {
|
||||
match sqlite3_column_type(stmt, col) {
|
||||
ffi::SQLITE_TEXT => FromSql::column_result(stmt, col).map(|t| Value::Text(t)),
|
||||
ffi::SQLITE_TEXT => FromSql::column_result(stmt, col).map(Value::Text),
|
||||
ffi::SQLITE_INTEGER => Ok(Value::Integer(ffi::sqlite3_column_int64(stmt, col))),
|
||||
ffi::SQLITE_FLOAT => Ok(Value::Real(ffi::sqlite3_column_double(stmt, col))),
|
||||
ffi::SQLITE_NULL => Ok(Value::Null),
|
||||
ffi::SQLITE_BLOB => FromSql::column_result(stmt, col).map(|t| Value::Blob(t)),
|
||||
ffi::SQLITE_BLOB => FromSql::column_result(stmt, col).map(Value::Blob),
|
||||
_ => Err(Error::InvalidColumnType),
|
||||
}
|
||||
}
|
||||
@@ -304,12 +305,14 @@ impl FromSql for Value {
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
#[cfg_attr(feature="clippy", allow(similar_names))]
|
||||
mod test {
|
||||
extern crate time;
|
||||
|
||||
use Connection;
|
||||
use Error;
|
||||
use libc::{c_int, c_double};
|
||||
use std::f64::EPSILON;
|
||||
|
||||
fn checked_memory_handle() -> Connection {
|
||||
let db = Connection::open_in_memory().unwrap();
|
||||
@@ -333,7 +336,7 @@ mod test {
|
||||
let db = checked_memory_handle();
|
||||
|
||||
let s = "hello, world!";
|
||||
db.execute("INSERT INTO foo(t) VALUES (?)", &[&s.to_string()]).unwrap();
|
||||
db.execute("INSERT INTO foo(t) VALUES (?)", &[&s.to_owned()]).unwrap();
|
||||
|
||||
let from: String = db.query_row("SELECT t FROM foo", &[], |r| r.get(0)).unwrap();
|
||||
assert_eq!(from, s);
|
||||
@@ -366,6 +369,7 @@ mod test {
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[cfg_attr(feature="clippy", allow(cyclomatic_complexity))]
|
||||
fn test_mismatched_types() {
|
||||
fn is_invalid_column_type(err: Error) -> bool {
|
||||
match err {
|
||||
@@ -389,7 +393,7 @@ mod test {
|
||||
assert_eq!(vec![1, 2], row.get_checked::<i32, Vec<u8>>(0).unwrap());
|
||||
assert_eq!("text", row.get_checked::<i32, String>(1).unwrap());
|
||||
assert_eq!(1, row.get_checked::<i32, c_int>(2).unwrap());
|
||||
assert_eq!(1.5, row.get_checked::<i32, c_double>(3).unwrap());
|
||||
assert!((1.5 - row.get_checked::<i32, c_double>(3).unwrap()).abs() < EPSILON);
|
||||
assert!(row.get_checked::<i32, Option<c_int>>(4).unwrap().is_none());
|
||||
assert!(row.get_checked::<i32, Option<c_double>>(4).unwrap().is_none());
|
||||
assert!(row.get_checked::<i32, Option<String>>(4).unwrap().is_none());
|
||||
@@ -452,7 +456,10 @@ mod test {
|
||||
assert_eq!(Value::Text(String::from("text")),
|
||||
row.get_checked::<i32, Value>(1).unwrap());
|
||||
assert_eq!(Value::Integer(1), row.get_checked::<i32, Value>(2).unwrap());
|
||||
assert_eq!(Value::Real(1.5), row.get_checked::<i32, Value>(3).unwrap());
|
||||
match row.get_checked::<i32, Value>(3).unwrap() {
|
||||
Value::Real(val) => assert!((1.5 - val).abs() < EPSILON),
|
||||
x => panic!("Invalid Value {:?}", x),
|
||||
}
|
||||
assert_eq!(Value::Null, row.get_checked::<i32, Value>(4).unwrap());
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user