Merge branch 'danieldulaney-bindable-option'

This commit is contained in:
Ivan Ukhov 2020-06-05 21:49:43 +02:00
commit 7f53537d74
2 changed files with 33 additions and 0 deletions

View File

@ -229,6 +229,17 @@ impl Bindable for () {
}
}
impl<T: Bindable> Bindable for Option<T> {
#[inline]
fn bind(self, statement: &mut Statement, i: usize) -> Result<()> {
debug_assert!(i > 0, "the indexing starts from 1");
match self {
Some(inner) => inner.bind(statement, i),
None => ().bind(statement, i),
}
}
}
impl Readable for Value {
fn read(statement: &Statement, i: usize) -> Result<Self> {
Ok(match statement.kind(i) {

View File

@ -186,6 +186,28 @@ fn statement_bind() {
assert_eq!(ok!(statement.next()), State::Done);
}
#[test]
fn statement_optional_bind() {
let connection = setup_users(":memory:");
let statement = "INSERT INTO users VALUES (?, ?, ?, ?)";
let mut statement = ok!(connection.prepare(statement));
ok!(statement.bind(1, None::<i64>));
ok!(statement.bind(2, None::<&str>));
ok!(statement.bind(3, None::<f64>));
ok!(statement.bind(4, None::<&[u8]>));
assert_eq!(ok!(statement.next()), State::Done);
let statement = "INSERT INTO users VALUES (?, ?, ?, ?)";
let mut statement = ok!(connection.prepare(statement));
ok!(statement.bind(1, Some(2i64)));
ok!(statement.bind(2, Some("Bob")));
ok!(statement.bind(3, Some(69.42)));
ok!(statement.bind(4, Some(&[0x69u8, 0x42u8][..])));
assert_eq!(ok!(statement.next()), State::Done);
}
#[test]
fn statement_count() {
let connection = setup_users(":memory:");