db-pool 0.6.0

A thread-safe database pool for running database-tied integration tests in parallel
Documentation
#[allow(dead_code)]
pub const GET_DATABASE_NAMES: &str =
    "SELECT schema_name FROM information_schema.schemata WHERE schema_name LIKE 'db_pool_%';";

pub const TURN_OFF_FOREIGN_KEY_CHECKS: &str = "SET FOREIGN_KEY_CHECKS = 0";
pub const TURN_ON_FOREIGN_KEY_CHECKS: &str = "SET FOREIGN_KEY_CHECKS = 1";

pub const USE_DEFAULT_DATABASE: &str = "USE information_schema";

pub fn create_database(db_name: &str) -> String {
    format!("CREATE DATABASE {db_name}")
}

pub fn create_user(name: &str, host: &str) -> String {
    format!("CREATE USER {name}@{host} IDENTIFIED BY '{name}'")
}

pub fn use_database(db_name: &str) -> String {
    format!("USE {db_name}")
}

pub fn grant_all_privileges(db_name: &str, host: &str) -> String {
    format!("GRANT ALL PRIVILEGES ON {db_name}.* TO {db_name}@{host}")
}

pub fn grant_restricted_privileges(db_name: &str, host: &str) -> String {
    format!("GRANT SELECT, INSERT, UPDATE, DELETE ON {db_name}.* TO {db_name}@{host}")
}

#[allow(dead_code)]
pub fn get_table_names(db_name: &str) -> String {
    format!("SELECT table_name FROM information_schema.tables WHERE table_schema = '{db_name}'")
}

pub fn truncate_table(table_name: &str, db_name: &str) -> String {
    format!("TRUNCATE TABLE {db_name}.{table_name}")
}

pub fn drop_database(db_name: &str) -> String {
    format!("DROP DATABASE {db_name}")
}

pub fn drop_user(name: &str, host: &str) -> String {
    format!("DROP USER {name}@{host}")
}

#[cfg(test)]
pub(crate) mod tests {
    pub const CREATE_ENTITIES_STATEMENTS: [&str; 2] = [
        "CREATE TABLE book(id INTEGER PRIMARY KEY AUTO_INCREMENT, title TEXT NOT NULL)",
        "CREATE TABLE dummy(id INTEGER PRIMARY KEY AUTO_INCREMENT)",
    ];

    pub const DDL_STATEMENTS: [&str; 11] = [
        "CREATE TABLE author(id INTEGER)",
        "ALTER TABLE book RENAME TO new_book",
        "ALTER TABLE book ADD description TEXT",
        "ALTER TABLE book MODIFY title TEXT",
        "ALTER TABLE book MODIFY title TEXT NOT NULL",
        "ALTER TABLE book RENAME COLUMN title TO new_title",
        "ALTER TABLE book CHANGE title new_title TEXT",
        "ALTER TABLE book CHANGE title new_title TEXT NOT NULL",
        "ALTER TABLE book DROP title",
        "TRUNCATE TABLE book",
        "DROP TABLE book",
    ];

    pub const DML_STATEMENTS: [&str; 4] = [
        "SELECT * FROM book",
        "INSERT INTO book (title) VALUES ('Title')",
        "UPDATE book SET title = 'Title 2' WHERE id = 1",
        "DELETE FROM book WHERE id = 1",
    ];
}