mirror of
https://github.com/isar/rusqlite.git
synced 2025-10-30 05:18:56 +08:00
Run rustfmt on all crate files
This commit is contained in:
160
src/types.rs
160
src/types.rs
@@ -55,14 +55,14 @@
|
||||
extern crate time;
|
||||
|
||||
use libc::{c_int, c_double, c_char};
|
||||
use std::ffi::{CStr};
|
||||
use std::ffi::CStr;
|
||||
use std::mem;
|
||||
use std::str;
|
||||
use super::ffi;
|
||||
use super::{SqliteResult, SqliteError, str_to_cstring};
|
||||
|
||||
pub use ffi::sqlite3_stmt as sqlite3_stmt;
|
||||
pub use ffi::sqlite3_column_type as sqlite3_column_type;
|
||||
pub use ffi::sqlite3_stmt;
|
||||
pub use ffi::sqlite3_column_type;
|
||||
|
||||
pub use ffi::{SQLITE_INTEGER, SQLITE_FLOAT, SQLITE_TEXT, SQLITE_BLOB, SQLITE_NULL};
|
||||
|
||||
@@ -107,9 +107,14 @@ impl<'a> ToSql for &'a str {
|
||||
return ffi::SQLITE_TOOBIG;
|
||||
}
|
||||
match str_to_cstring(self) {
|
||||
Ok(c_str) => ffi::sqlite3_bind_text(stmt, col, c_str.as_ptr(), length as c_int,
|
||||
ffi::SQLITE_TRANSIENT()),
|
||||
Err(_) => ffi::SQLITE_MISUSE,
|
||||
Ok(c_str) => {
|
||||
ffi::sqlite3_bind_text(stmt,
|
||||
col,
|
||||
c_str.as_ptr(),
|
||||
length as c_int,
|
||||
ffi::SQLITE_TRANSIENT())
|
||||
}
|
||||
Err(_) => ffi::SQLITE_MISUSE,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -125,8 +130,11 @@ impl<'a> ToSql for &'a [u8] {
|
||||
if self.len() > ::std::i32::MAX as usize {
|
||||
return ffi::SQLITE_TOOBIG;
|
||||
}
|
||||
ffi::sqlite3_bind_blob(
|
||||
stmt, col, mem::transmute(self.as_ptr()), self.len() as c_int, ffi::SQLITE_TRANSIENT())
|
||||
ffi::sqlite3_bind_blob(stmt,
|
||||
col,
|
||||
mem::transmute(self.as_ptr()),
|
||||
self.len() as c_int,
|
||||
ffi::SQLITE_TRANSIENT())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -203,9 +211,13 @@ impl FromSql for String {
|
||||
} else {
|
||||
let c_slice = CStr::from_ptr(c_text as *const c_char).to_bytes();
|
||||
let utf8_str = str::from_utf8(c_slice);
|
||||
utf8_str
|
||||
.map(|s| { s.to_string() })
|
||||
.map_err(|e| { SqliteError{code: 0, message: e.to_string()} })
|
||||
utf8_str.map(|s| s.to_string())
|
||||
.map_err(|e| {
|
||||
SqliteError {
|
||||
code: 0,
|
||||
message: e.to_string(),
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -222,7 +234,8 @@ impl FromSql for Vec<u8> {
|
||||
|
||||
// The documentation for sqlite3_column_bytes indicates it is always non-negative,
|
||||
// but we should assert here just to be sure.
|
||||
assert!(len >= 0, "unexpected negative return from sqlite3_column_bytes");
|
||||
assert!(len >= 0,
|
||||
"unexpected negative return from sqlite3_column_bytes");
|
||||
let len = len as usize;
|
||||
|
||||
Ok(from_raw_parts(mem::transmute(c_blob), len).to_vec())
|
||||
@@ -234,15 +247,17 @@ impl FromSql for Vec<u8> {
|
||||
}
|
||||
|
||||
impl FromSql for time::Timespec {
|
||||
unsafe fn column_result(stmt: *mut sqlite3_stmt,
|
||||
col: c_int) -> SqliteResult<time::Timespec> {
|
||||
unsafe fn column_result(stmt: *mut sqlite3_stmt, col: c_int) -> SqliteResult<time::Timespec> {
|
||||
let col_str = FromSql::column_result(stmt, col);
|
||||
col_str.and_then(|txt: String| {
|
||||
time::strptime(&txt, SQLITE_DATETIME_FMT).map(|tm| {
|
||||
tm.to_timespec()
|
||||
}).map_err(|parse_error| {
|
||||
SqliteError{ code: ffi::SQLITE_MISMATCH, message: format!("{}", parse_error) }
|
||||
})
|
||||
time::strptime(&txt, SQLITE_DATETIME_FMT)
|
||||
.map(|tm| tm.to_timespec())
|
||||
.map_err(|parse_error| {
|
||||
SqliteError {
|
||||
code: ffi::SQLITE_MISMATCH,
|
||||
message: format!("{}", parse_error),
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
@@ -262,7 +277,7 @@ impl<T: FromSql> FromSql for Option<T> {
|
||||
|
||||
unsafe fn column_has_valid_sqlite_type(stmt: *mut sqlite3_stmt, col: c_int) -> bool {
|
||||
sqlite3_column_type(stmt, col) == ffi::SQLITE_NULL ||
|
||||
T::column_has_valid_sqlite_type(stmt, col)
|
||||
T::column_has_valid_sqlite_type(stmt, col)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -283,7 +298,7 @@ mod test {
|
||||
fn test_blob() {
|
||||
let db = checked_memory_handle();
|
||||
|
||||
let v1234 = vec![1u8,2,3,4];
|
||||
let v1234 = vec![1u8, 2, 3, 4];
|
||||
db.execute("INSERT INTO foo(b) VALUES (?)", &[&v1234]).unwrap();
|
||||
|
||||
let v: Vec<u8> = db.query_row("SELECT b FROM foo", &[], |r| r.get(0)).unwrap();
|
||||
@@ -305,7 +320,10 @@ mod test {
|
||||
fn test_timespec() {
|
||||
let db = checked_memory_handle();
|
||||
|
||||
let ts = time::Timespec{sec: 10_000, nsec: 0 };
|
||||
let ts = time::Timespec {
|
||||
sec: 10_000,
|
||||
nsec: 0,
|
||||
};
|
||||
db.execute("INSERT INTO foo(t) VALUES (?)", &[&ts]).unwrap();
|
||||
|
||||
let from: time::Timespec = db.query_row("SELECT t FROM foo", &[], |r| r.get(0)).unwrap();
|
||||
@@ -317,7 +335,7 @@ mod test {
|
||||
let db = checked_memory_handle();
|
||||
|
||||
let s = Some("hello, world!");
|
||||
let b = Some(vec![1u8,2,3,4]);
|
||||
let b = Some(vec![1u8, 2, 3, 4]);
|
||||
|
||||
db.execute("INSERT INTO foo(t) VALUES (?)", &[&s]).unwrap();
|
||||
db.execute("INSERT INTO foo(b) VALUES (?)", &[&b]).unwrap();
|
||||
@@ -342,7 +360,9 @@ mod test {
|
||||
fn test_mismatched_types() {
|
||||
let db = checked_memory_handle();
|
||||
|
||||
db.execute("INSERT INTO foo(b, t, i, f) VALUES (X'0102', 'text', 1, 1.5)", &[]).unwrap();
|
||||
db.execute("INSERT INTO foo(b, t, i, f) VALUES (X'0102', 'text', 1, 1.5)",
|
||||
&[])
|
||||
.unwrap();
|
||||
|
||||
let mut stmt = db.prepare("SELECT b, t, i, f, n FROM foo").unwrap();
|
||||
let mut rows = stmt.query(&[]).unwrap();
|
||||
@@ -350,10 +370,10 @@ mod test {
|
||||
let row = rows.next().unwrap().unwrap();
|
||||
|
||||
// check the correct types come back as expected
|
||||
assert_eq!(vec![1,2], row.get_checked::<Vec<u8>>(0).unwrap());
|
||||
assert_eq!("text", row.get_checked::<String>(1).unwrap());
|
||||
assert_eq!(1, row.get_checked::<c_int>(2).unwrap());
|
||||
assert_eq!(1.5, row.get_checked::<c_double>(3).unwrap());
|
||||
assert_eq!(vec![1, 2], row.get_checked::<Vec<u8>>(0).unwrap());
|
||||
assert_eq!("text", row.get_checked::<String>(1).unwrap());
|
||||
assert_eq!(1, row.get_checked::<c_int>(2).unwrap());
|
||||
assert_eq!(1.5, row.get_checked::<c_double>(3).unwrap());
|
||||
assert!(row.get_checked::<Option<c_int>>(4).unwrap().is_none());
|
||||
assert!(row.get_checked::<Option<c_double>>(4).unwrap().is_none());
|
||||
assert!(row.get_checked::<Option<String>>(4).unwrap().is_none());
|
||||
@@ -361,41 +381,69 @@ mod test {
|
||||
// check some invalid types
|
||||
|
||||
// 0 is actually a blob (Vec<u8>)
|
||||
assert_eq!(row.get_checked::<c_int>(0).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<i64>(0).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<c_double>(0).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<String>(0).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<time::Timespec>(0).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<Option<c_int>>(0).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<c_int>(0).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<i64>(0).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<c_double>(0).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<String>(0).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<time::Timespec>(0).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<Option<c_int>>(0).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
|
||||
// 1 is actually a text (String)
|
||||
assert_eq!(row.get_checked::<c_int>(1).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<i64>(1).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<c_double>(1).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<Vec<u8>>(1).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<Option<c_int>>(1).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<c_int>(1).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<i64>(1).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<c_double>(1).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<Vec<u8>>(1).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<Option<c_int>>(1).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
|
||||
// 2 is actually an integer
|
||||
assert_eq!(row.get_checked::<c_double>(2).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<String>(2).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<Vec<u8>>(2).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<time::Timespec>(2).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<Option<c_double>>(2).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<c_double>(2).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<String>(2).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<Vec<u8>>(2).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<time::Timespec>(2).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<Option<c_double>>(2).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
|
||||
// 3 is actually a float (c_double)
|
||||
assert_eq!(row.get_checked::<c_int>(3).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<i64>(3).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<String>(3).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<Vec<u8>>(3).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<time::Timespec>(3).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<Option<c_int>>(3).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<c_int>(3).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<i64>(3).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<String>(3).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<Vec<u8>>(3).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<time::Timespec>(3).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<Option<c_int>>(3).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
|
||||
// 4 is actually NULL
|
||||
assert_eq!(row.get_checked::<c_int>(4).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<i64>(4).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<c_double>(4).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<String>(4).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<Vec<u8>>(4).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<time::Timespec>(4).err().unwrap().code, ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<c_int>(4).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<i64>(4).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<c_double>(4).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<String>(4).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<Vec<u8>>(4).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
assert_eq!(row.get_checked::<time::Timespec>(4).err().unwrap().code,
|
||||
ffi::SQLITE_MISMATCH);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user