Refactoring

This commit is contained in:
Billy Chan 2021-11-09 18:14:13 +08:00
parent c1fae1bc86
commit cc035d7aa7
No known key found for this signature in database
GPG Key ID: A2D690CAC7DF3CC7
5 changed files with 9 additions and 54 deletions

View File

@ -292,22 +292,6 @@ impl DatabaseConnection {
}
}
impl DatabaseConnection {
/// Get database version
pub fn version(&self) -> String {
match self {
#[cfg(feature = "sqlx-mysql")]
DatabaseConnection::SqlxMySqlPoolConnection(conn) => conn.version.to_string(),
#[cfg(feature = "sqlx-postgres")]
DatabaseConnection::SqlxPostgresPoolConnection(_) => "".to_string(),
#[cfg(feature = "sqlx-sqlite")]
DatabaseConnection::SqlxSqlitePoolConnection(conn) => conn.version.to_string(),
DatabaseConnection::Disconnected => panic!("Disconnected"),
_ => unimplemented!(),
}
}
}
impl DbBackend {
/// Check if the URI is the same as the specified database backend.
/// Returns true if they match.

View File

@ -367,37 +367,13 @@ impl<'a> ConnectionTrait<'a> for DatabaseTransaction {
}
fn returning_on_insert(&self) -> bool {
match self.backend {
DbBackend::MySql => {
// Supported if it's MariaDB on or after version 10.5.0
// Not supported in all MySQL versions
self.support_returning
}
DbBackend::Postgres => {
// Supported by all Postgres versions
true
}
DbBackend::Sqlite => {
// Supported by SQLite on or after version 3.35.0 (2021-03-12)
self.support_returning
}
}
self.support_returning
}
fn returning_on_update(&self) -> bool {
match self.backend {
DbBackend::MySql => {
// Not supported in all MySQL & MariaDB versions
false
}
DbBackend::Postgres => {
// Supported by all Postgres versions
true
}
DbBackend::Sqlite => {
// Supported by SQLite on or after version 3.35.0 (2021-03-12)
self.support_returning
}
DbBackend::MySql => false,
_ => self.support_returning,
}
}
}

View File

@ -24,7 +24,6 @@ pub struct SqlxMySqlConnector;
#[derive(Debug, Clone)]
pub struct SqlxMySqlPoolConnection {
pool: MySqlPool,
pub(crate) version: String,
pub(crate) support_returning: bool,
}
@ -186,17 +185,16 @@ pub(crate) fn sqlx_query(stmt: &Statement) -> sqlx::query::Query<'_, MySql, MySq
}
async fn into_db_connection(pool: MySqlPool) -> Result<DatabaseConnection, DbErr> {
let (version, support_returning) = parse_support_returning(&pool).await?;
let support_returning = parse_support_returning(&pool).await?;
Ok(DatabaseConnection::SqlxMySqlPoolConnection(
SqlxMySqlPoolConnection {
pool,
version,
support_returning,
},
))
}
async fn parse_support_returning(pool: &MySqlPool) -> Result<(String, bool), DbErr> {
async fn parse_support_returning(pool: &MySqlPool) -> Result<bool, DbErr> {
let stmt = Statement::from_string(
DbBackend::MySql,
r#"SHOW VARIABLES LIKE "version""#.to_owned(),
@ -232,5 +230,5 @@ async fn parse_support_returning(pool: &MySqlPool) -> Result<(String, bool), DbE
};
debug_print!("db_version: {}", version);
debug_print!("db_support_returning: {}", support_returning);
Ok((version, support_returning))
Ok(support_returning)
}

View File

@ -24,7 +24,6 @@ pub struct SqlxSqliteConnector;
#[derive(Debug, Clone)]
pub struct SqlxSqlitePoolConnection {
pool: SqlitePool,
pub(crate) version: String,
pub(crate) support_returning: bool,
}
@ -190,17 +189,16 @@ pub(crate) fn sqlx_query(stmt: &Statement) -> sqlx::query::Query<'_, Sqlite, Sql
}
async fn into_db_connection(pool: SqlitePool) -> Result<DatabaseConnection, DbErr> {
let (version, support_returning) = parse_support_returning(&pool).await?;
let support_returning = parse_support_returning(&pool).await?;
Ok(DatabaseConnection::SqlxSqlitePoolConnection(
SqlxSqlitePoolConnection {
pool,
version,
support_returning,
},
))
}
async fn parse_support_returning(pool: &SqlitePool) -> Result<(String, bool), DbErr> {
async fn parse_support_returning(pool: &SqlitePool) -> Result<bool, DbErr> {
let stmt = Statement::from_string(
DbBackend::Sqlite,
r#"SELECT sqlite_version() AS version"#.to_owned(),
@ -229,5 +227,5 @@ async fn parse_support_returning(pool: &SqlitePool) -> Result<(String, bool), Db
let support_returning = ver_major >= 3 && ver_minor >= 35;
debug_print!("db_version: {}", version);
debug_print!("db_support_returning: {}", support_returning);
Ok((version, support_returning))
Ok(support_returning)
}

View File

@ -36,7 +36,6 @@ async fn main() -> Result<(), DbErr> {
returning.columns(vec![Column::Id, Column::Name, Column::ProfitMargin]);
create_tables(db).await?;
println!("db_version: {:#?}", db.version());
if db.returning_on_insert() {
insert.returning(returning.clone());