1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#[cfg(feature = "db-auth")]
use crate::db_auth::{
    Role,
    User,
};
use crate::{
    table::SchemaContent,
    DbError,
    Rows,
    TableDef,
    TableName,
    Value,
};
use clia_rustorm_codegen::FromDao;
use serde::Serialize;

/// The current database name and its comment
#[derive(Serialize, FromDao)]
pub struct DatabaseName {
    pub(crate) name: String,
    pub(crate) description: Option<String>,
}

pub trait Database {
    fn begin_transaction(&mut self) -> Result<(), DbError>;

    fn commit_transaction(&mut self) -> Result<(), DbError>;

    fn rollback_transaction(&mut self) -> Result<(), DbError>;

    fn execute_sql_with_return(&mut self, sql: &str, param: &[&Value]) -> Result<Rows, DbError>;

    fn get_table(&mut self, table_name: &TableName) -> Result<Option<TableDef>, DbError>;

    fn set_autoincrement_value(
        &mut self,
        table_name: &TableName,
        sequence_value: i64,
    ) -> Result<Option<i64>, DbError>;

    fn get_autoincrement_last_value(
        &mut self,
        table_name: &TableName,
    ) -> Result<Option<i64>, DbError>;

    fn get_all_tables(&mut self) -> Result<Vec<TableDef>, DbError>;

    fn get_tablenames(&mut self) -> Result<Vec<TableName>, DbError>;

    fn get_grouped_tables(&mut self) -> Result<Vec<SchemaContent>, DbError>;

    fn get_database_name(&mut self) -> Result<Option<DatabaseName>, DbError>;

    #[cfg(feature = "db-auth")]
    fn get_users(&mut self) -> Result<Vec<User>, DbError>;

    #[cfg(feature = "db-auth")]
    fn get_user_detail(&mut self, username: &str) -> Result<Vec<User>, DbError>;

    #[cfg(feature = "db-auth")]
    fn get_roles(&mut self, username: &str) -> Result<Vec<Role>, DbError>;
}