use anyhow::Result;
use crate::config::TargetConfig;
pub mod base;
pub mod clickhouse;
pub mod mariadb;
pub mod postgres;
pub mod sqlite;
pub use base::{Backend, BackendConn, BackendDialect, ColSpec};
pub use clickhouse::ClickhouseBackend;
pub use mariadb::MariadbBackend;
pub use postgres::PostgresBackend;
pub use sqlite::SQLiteBackend;
pub enum AnyBackend {
Postgres(PostgresBackend),
Mariadb(MariadbBackend),
Sqlite(SQLiteBackend),
Clickhouse(ClickhouseBackend),
}
pub fn load_backend(cfg: &TargetConfig) -> Result<AnyBackend> {
match cfg {
TargetConfig::Postgres(t) => Ok(AnyBackend::Postgres(PostgresBackend::new(
t.dsn_env.clone(),
))),
TargetConfig::Mariadb(t) => Ok(AnyBackend::Mariadb(MariadbBackend::new(t.dsn_env.clone()))),
TargetConfig::Sqlite(t) => Ok(AnyBackend::Sqlite(SQLiteBackend::new(t.dsn_env.clone()))),
TargetConfig::Clickhouse(t) => Ok(AnyBackend::Clickhouse(ClickhouseBackend::new(
t.dsn_env.clone(),
))),
}
}