Return an InvalidQuery error when SQL is not read only

This commit is contained in:
gwenn
2018-08-10 20:48:13 +02:00
parent a4273739ab
commit 31de0187a2
3 changed files with 27 additions and 1 deletions

View File

@@ -154,6 +154,7 @@ impl<'conn> Statement<'conn> {
///
/// Will return `Err` if binding parameters fails.
pub fn query<'a>(&'a mut self, params: &[&ToSql]) -> Result<Rows<'a>> {
try!(self.check_readonly());
try!(self.bind_parameters(params));
Ok(Rows::new(self))
}
@@ -181,6 +182,7 @@ impl<'conn> Statement<'conn> {
///
/// Will return `Err` if binding parameters fails.
pub fn query_named<'a>(&'a mut self, params: &[(&str, &ToSql)]) -> Result<Rows<'a>> {
try!(self.check_readonly());
try!(self.bind_parameters_named(params));
Ok(Rows::new(self))
}
@@ -465,6 +467,19 @@ impl<'conn> Statement<'conn> {
mem::swap(&mut stmt, &mut self.stmt);
self.conn.decode_result(stmt.finalize())
}
#[cfg(not(feature = "bundled"))]
fn check_readonly(&self) -> Result<()> {
Ok(())
}
#[cfg(feature = "bundled")]
fn check_readonly(&self) -> Result<()> {
if !self.stmt.readonly() {
return Err(Error::InvalidQuery);
}
Ok(())
}
}
impl<'conn> Into<RawStatement> for Statement<'conn> {