use super::Connection;
use super::error::Error;
use super::params::Params;
use super::statement::Statement;
pub struct Transaction<'conn> {
conn: &'conn mut Connection,
trans_handle: i32,
}
impl Transaction<'_> {
pub fn new(conn: &mut Connection) -> Result<Transaction<'_>, Error> {
let trans_handle = conn._begin_trans()?;
Ok(Transaction { conn, trans_handle })
}
pub fn execute_batch(&mut self, query: &str) -> Result<(), Error> {
self.conn._execute_batch(query, self.trans_handle)
}
pub fn execute<P: Params>(&mut self, query: &str, params: P) -> Result<(), Error> {
self.conn._execute(query, params, self.trans_handle)
}
pub fn commit(&mut self) -> Result<(), Error> {
self.conn._commit(self.trans_handle)
}
pub fn rollback(&mut self) -> Result<(), Error> {
self.conn._rollback(self.trans_handle)
}
pub fn prepare(&mut self, query: &str) -> Result<Statement<'_>, Error> {
self.conn._prepare(query, self.trans_handle)
}
}
impl Drop for Transaction<'_> {
fn drop(&mut self) {
self.conn.drop_transaction(self.trans_handle);
}
}