From 7ba9db9b6ffca7d48ad748bce85c9a6c2489a4ea Mon Sep 17 00:00:00 2001 From: Steven Fackler Date: Thu, 27 Nov 2014 11:16:14 -0800 Subject: [PATCH] Check for statement close errors in execute --- src/lib.rs | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index c289eb35..6cfc430c 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -853,7 +853,10 @@ impl Connection { /// /// On success, returns the number of rows modified or 0 if not applicable. pub fn execute(&self, query: &str, params: &[&ToSql]) -> Result { - self.prepare(query).and_then(|stmt| stmt.execute(params)) + let stmt = try!(self.prepare(query)); + let out = try!(stmt.execute(params)); + try!(stmt.finish()); + Ok(out) } /// Execute a sequence of SQL statements. @@ -999,7 +1002,10 @@ impl<'conn> Transaction<'conn> { /// Like `Connection::execute`. pub fn execute(&self, query: &str, params: &[&ToSql]) -> Result { - self.prepare(query).and_then(|s| s.execute(params)) + let stmt = try!(self.prepare(query)); + let out = try!(stmt.execute(params)); + try!(stmt.finish()); + Ok(out) } /// Like `Connection::batch_execute`. @@ -1680,9 +1686,7 @@ pub trait GenericConnection { fn prepare<'a>(&'a self, query: &str) -> Result>; /// Like `Connection::execute`. - fn execute(&self, query: &str, params: &[&ToSql]) -> Result { - self.prepare(query).and_then(|s| s.execute(params)) - } + fn execute(&self, query: &str, params: &[&ToSql]) -> Result; /// Like `Connection::prepare_copy_in`. fn prepare_copy_in<'a>(&'a self, table: &str, columns: &[&str]) @@ -1700,6 +1704,10 @@ impl GenericConnection for Connection { self.prepare(query) } + fn execute(&self, query: &str, params: &[&ToSql]) -> Result { + self.execute(query, params) + } + fn transaction<'a>(&'a self) -> Result> { self.transaction() } @@ -1719,6 +1727,10 @@ impl<'a> GenericConnection for Transaction<'a> { self.prepare(query) } + fn execute(&self, query: &str, params: &[&ToSql]) -> Result { + self.execute(query, params) + } + fn transaction<'a>(&'a self) -> Result> { self.transaction() }