1use crate::errors::{DbKind, Error, MigraResult, StdResult};
2use crate::migration;
3
4pub trait BatchExecute {
8 fn batch_execute(&mut self, sql: &str) -> StdResult<()>;
10}
11
12pub trait ManageTransaction: BatchExecute {
14 fn begin_transaction(&mut self) -> MigraResult<()> {
16 self.batch_execute("BEGIN")
17 .map_err(|err| Error::db(err, DbKind::OpenTransaction))
18 }
19
20 fn rollback_transaction(&mut self) -> MigraResult<()> {
22 self.batch_execute("ROLLBACK")
23 .map_err(|err| Error::db(err, DbKind::RollbackTransaction))
24 }
25
26 fn commit_transaction(&mut self) -> MigraResult<()> {
28 self.batch_execute("COMMIT")
29 .map_err(|err| Error::db(err, DbKind::CommitTransaction))
30 }
31}
32
33pub trait ManageMigrations: BatchExecute {
35 fn apply_sql(&mut self, sql: &str) -> MigraResult<()> {
39 self.batch_execute(sql)
40 .map_err(|err| Error::db(err, DbKind::ApplySql))
41 }
42
43 fn create_migrations_table(&mut self) -> MigraResult<()>;
45
46 fn insert_migration(&mut self, name: &str) -> MigraResult<u64>;
48
49 fn delete_migration(&mut self, name: &str) -> MigraResult<u64>;
51
52 fn get_applied_migrations(&mut self) -> MigraResult<migration::List>;
54
55 fn run_upgrade_migration(&mut self, name: &str, content: &str) -> MigraResult<()> {
60 self.apply_sql(content)?;
61 self.insert_migration(name)?;
62 Ok(())
63 }
64
65 fn run_downgrade_migration(&mut self, name: &str, content: &str) -> MigraResult<()> {
70 self.apply_sql(content)?;
71 self.delete_migration(name)?;
72 Ok(())
73 }
74}