Add SchemaBuilderBackend

This commit is contained in:
Chris Tsang 2021-06-29 16:59:40 +08:00
parent 72e8b1f9d6
commit 3e7220aad0

View File

@ -1,6 +1,7 @@
use crate::{ExecErr, ExecResult, QueryErr, QueryResult, Statement, Transaction};
use sea_query::{
MysqlQueryBuilder, PostgresQueryBuilder, QueryStatementBuilder, SqliteQueryBuilder,
MysqlQueryBuilder, PostgresQueryBuilder, QueryStatementBuilder, SchemaStatementBuilder,
SqliteQueryBuilder,
};
use std::{error::Error, fmt};
@ -22,6 +23,12 @@ pub enum QueryBuilderBackend {
Sqlite,
}
pub enum SchemaBuilderBackend {
MySql,
Postgres,
Sqlite,
}
#[derive(Debug)]
pub struct ConnectionErr;
@ -70,6 +77,18 @@ impl DatabaseConnection {
}
}
pub fn get_schema_builder_backend(&self) -> SchemaBuilderBackend {
match self {
#[cfg(feature = "sqlx-mysql")]
DatabaseConnection::SqlxMySqlPoolConnection(_) => SchemaBuilderBackend::MySql,
#[cfg(feature = "sqlx-sqlite")]
DatabaseConnection::SqlxSqlitePoolConnection(_) => SchemaBuilderBackend::Sqlite,
#[cfg(feature = "mock")]
DatabaseConnection::MockDatabaseConnection(_) => SchemaBuilderBackend::Postgres,
DatabaseConnection::Disconnected => panic!("Disconnected"),
}
}
pub async fn execute(&self, stmt: Statement) -> Result<ExecResult, ExecErr> {
match self {
#[cfg(feature = "sqlx-mysql")]
@ -139,3 +158,17 @@ impl QueryBuilderBackend {
.into()
}
}
impl SchemaBuilderBackend {
pub fn build<S>(&self, statement: &S) -> Statement
where
S: SchemaStatementBuilder,
{
match self {
Self::MySql => statement.build(MysqlQueryBuilder),
Self::Postgres => statement.build(PostgresQueryBuilder),
Self::Sqlite => statement.build(SqliteQueryBuilder),
}
.into()
}
}