spawnflake 0.2.9

Generate pattern based random data for mysql
Documentation
use crate::datastores::generic::common_models::{Describe, ForeignKeyRel};
use mysql::prelude::*;
use mysql::{Conn, Error};

pub fn get_tables(conn: &mut Conn, schema: String) -> Result<Vec<String>, Error> {
    conn.query_map(
        format!("SELECT TABLE_NAME FROM information_schema.tables where TABLE_SCHEMA = '{schema}'"),
        |table_name| table_name,
    )
}

pub fn get_foreign_keys(
    conn: &mut Conn,
    table_name: String,
    schema: String,
) -> Result<Vec<ForeignKeyRel>, Error> {
    conn.query_map(
        format!(
            "SELECT
                TABLE_NAME,
                COLUMN_NAME,
                REFERENCED_TABLE_NAME,
                REFERENCED_COLUMN_NAME 
                FROM information_schema.KEY_COLUMN_USAGE
                WHERE TABLE_SCHEMA ='{schema}'
                AND (TABLE_NAME = '{table_name}' OR REFERENCED_TABLE_NAME ='{table_name}')
                AND REFERENCED_TABLE_NAME is not null"
        ),
        |(table_name, column_name, referenced_table_name, referenced_column_name)| ForeignKeyRel {
            table_name,
            column_name,
            referenced_table_name,
            referenced_column_name,
        },
    )
}

pub fn get_columns(conn: &mut Conn, table_name: String) -> Result<Vec<Describe>, Error> {
    conn.query_map(
        format!("DESCRIBE {table_name}"),
        |(field, data_type, null, key, default, extra)| Describe {
            field,
            data_type,
            null,
            key,
            default,
            extra,
        },
    )
}