mirror of
https://github.com/fluencelabs/sqlite-wasm-connector
synced 2025-03-15 06:20:50 +00:00
Merge branch 'smklein-leak'
This commit is contained in:
commit
d396509611
@ -28,12 +28,25 @@ impl Connection {
|
||||
pub fn open_with_flags<T: AsRef<Path>>(path: T, flags: OpenFlags) -> Result<Connection> {
|
||||
let mut raw = 0 as *mut _;
|
||||
unsafe {
|
||||
ok!(ffi::sqlite3_open_v2(
|
||||
let ret = ffi::sqlite3_open_v2(
|
||||
path_to_cstr!(path.as_ref()).as_ptr(),
|
||||
&mut raw,
|
||||
flags.0,
|
||||
0 as *const _,
|
||||
));
|
||||
0 as *const _ );
|
||||
|
||||
// Explicitly close the connection on error.
|
||||
// This is a quirk of the C API, where the database handle
|
||||
// (raw) is unconditionally allocated.
|
||||
match ret {
|
||||
ffi::SQLITE_OK => {},
|
||||
code => {
|
||||
ffi::sqlite3_close(raw);
|
||||
return Err(::Error {
|
||||
code: Some(code as isize),
|
||||
message: None
|
||||
});
|
||||
},
|
||||
}
|
||||
}
|
||||
Ok(Connection {
|
||||
raw: raw,
|
||||
@ -101,7 +114,7 @@ impl Connection {
|
||||
where
|
||||
F: FnMut(usize) -> bool + Send + 'static,
|
||||
{
|
||||
try!(self.remove_busy_handler());
|
||||
self.remove_busy_handler()?;
|
||||
unsafe {
|
||||
let callback = Box::new(callback);
|
||||
let result = ffi::sqlite3_busy_handler(
|
||||
|
@ -13,9 +13,9 @@ impl<'l> Cursor<'l> {
|
||||
/// Bind values to all parameters.
|
||||
pub fn bind(&mut self, values: &[Value]) -> Result<()> {
|
||||
self.state = None;
|
||||
try!(self.statement.reset());
|
||||
self.statement.reset()?;
|
||||
for (i, value) in values.iter().enumerate() {
|
||||
try!(self.statement.bind(i + 1, value));
|
||||
self.statement.bind(i + 1, value)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
@ -32,14 +32,14 @@ impl<'l> Cursor<'l> {
|
||||
Some(State::Row) => {}
|
||||
Some(State::Done) => return Ok(None),
|
||||
_ => {
|
||||
self.state = Some(try!(self.statement.next()));
|
||||
self.state = Some(self.statement.next()?);
|
||||
return self.next();
|
||||
}
|
||||
}
|
||||
self.values = match self.values.take() {
|
||||
Some(mut values) => {
|
||||
for (i, value) in values.iter_mut().enumerate() {
|
||||
*value = try!(self.statement.read(i));
|
||||
*value = self.statement.read(i)?;
|
||||
}
|
||||
Some(values)
|
||||
}
|
||||
@ -47,12 +47,12 @@ impl<'l> Cursor<'l> {
|
||||
let count = self.statement.count();
|
||||
let mut values = Vec::with_capacity(count);
|
||||
for i in 0..count {
|
||||
values.push(try!(self.statement.read(i)));
|
||||
values.push(self.statement.read(i)?);
|
||||
}
|
||||
Some(values)
|
||||
}
|
||||
};
|
||||
self.state = Some(try!(self.statement.next()));
|
||||
self.state = Some(self.statement.next()?);
|
||||
Ok(Some(self.values.as_ref().unwrap()))
|
||||
}
|
||||
|
||||
|
@ -232,10 +232,10 @@ impl Bindable for () {
|
||||
impl Readable for Value {
|
||||
fn read(statement: &Statement, i: usize) -> Result<Self> {
|
||||
Ok(match statement.kind(i) {
|
||||
Type::Binary => Value::Binary(try!(Readable::read(statement, i))),
|
||||
Type::Float => Value::Float(try!(Readable::read(statement, i))),
|
||||
Type::Integer => Value::Integer(try!(Readable::read(statement, i))),
|
||||
Type::String => Value::String(try!(Readable::read(statement, i))),
|
||||
Type::Binary => Value::Binary(Readable::read(statement, i)?),
|
||||
Type::Float => Value::Float(Readable::read(statement, i)?),
|
||||
Type::Integer => Value::Integer(Readable::read(statement, i)?),
|
||||
Type::String => Value::String(Readable::read(statement, i)?),
|
||||
Type::Null => Value::Null,
|
||||
})
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user