Change mock connector behavior to mock Postgres regardless of feature flags

This commit is contained in:
Chris Tsang 2021-09-28 13:28:43 +08:00
parent 0cfa8784a3
commit 85eadd38d2
3 changed files with 11 additions and 16 deletions

View File

@ -293,7 +293,7 @@ pub trait EntityTrait: EntityName {
/// assert_eq!( /// assert_eq!(
/// db.into_transaction_log(), /// db.into_transaction_log(),
/// vec![Transaction::from_sql_and_values( /// vec![Transaction::from_sql_and_values(
/// DbBackend::Postgres, r#"INSERT INTO "cake" ("name") VALUES ($1)"#, vec!["Apple Pie".into()] /// DbBackend::Postgres, r#"INSERT INTO "cake" ("name") VALUES ($1) RETURNING "id""#, vec!["Apple Pie".into()]
/// )]); /// )]);
/// ``` /// ```
fn insert<A>(model: A) -> Insert<A> fn insert<A>(model: A) -> Insert<A>
@ -344,7 +344,7 @@ pub trait EntityTrait: EntityName {
/// assert_eq!( /// assert_eq!(
/// db.into_transaction_log(), /// db.into_transaction_log(),
/// vec![Transaction::from_sql_and_values( /// vec![Transaction::from_sql_and_values(
/// DbBackend::Postgres, r#"INSERT INTO "cake" ("name") VALUES ($1), ($2)"#, /// DbBackend::Postgres, r#"INSERT INTO "cake" ("name") VALUES ($1), ($2) RETURNING "id""#,
/// vec!["Apple Pie".into(), "Orange Scone".into()] /// vec!["Apple Pie".into(), "Orange Scone".into()]
/// )]); /// )]);
/// ``` /// ```

View File

@ -1,5 +1,5 @@
use crate::{ use crate::{
error::*, ActiveModelTrait, DatabaseConnection, EntityTrait, Insert, PrimaryKeyTrait, error::*, ActiveModelTrait, DatabaseConnection, DbBackend, EntityTrait, Insert, PrimaryKeyTrait,
Statement, TryFromU64, Statement, TryFromU64,
}; };
use sea_query::InsertStatement; use sea_query::InsertStatement;
@ -37,8 +37,7 @@ where
// TODO: extract primary key's value from query // TODO: extract primary key's value from query
// so that self is dropped before entering await // so that self is dropped before entering await
let mut query = self.query; let mut query = self.query;
#[cfg(feature = "sqlx-postgres")] if db.get_database_backend() == DbBackend::Postgres {
if let DatabaseConnection::SqlxPostgresPoolConnection(_) = db {
use crate::{sea_query::Query, Iterable}; use crate::{sea_query::Query, Iterable};
if <A::Entity as EntityTrait>::PrimaryKey::iter().count() > 0 { if <A::Entity as EntityTrait>::PrimaryKey::iter().count() > 0 {
query.returning( query.returning(
@ -86,14 +85,13 @@ where
{ {
type PrimaryKey<A> = <<A as ActiveModelTrait>::Entity as EntityTrait>::PrimaryKey; type PrimaryKey<A> = <<A as ActiveModelTrait>::Entity as EntityTrait>::PrimaryKey;
type ValueTypeOf<A> = <PrimaryKey<A> as PrimaryKeyTrait>::ValueType; type ValueTypeOf<A> = <PrimaryKey<A> as PrimaryKeyTrait>::ValueType;
let last_insert_id = match db { let last_insert_id = match db.get_database_backend() {
#[cfg(feature = "sqlx-postgres")] DbBackend::Postgres => {
DatabaseConnection::SqlxPostgresPoolConnection(conn) => {
use crate::{sea_query::Iden, Iterable}; use crate::{sea_query::Iden, Iterable};
let cols = PrimaryKey::<A>::iter() let cols = PrimaryKey::<A>::iter()
.map(|col| col.to_string()) .map(|col| col.to_string())
.collect::<Vec<_>>(); .collect::<Vec<_>>();
let res = conn.query_one(statement).await?.unwrap(); let res = db.query_one(statement).await?.unwrap();
res.try_get_many("", cols.as_ref()).unwrap_or_default() res.try_get_many("", cols.as_ref()).unwrap_or_default()
} }
_ => { _ => {

View File

@ -1,4 +1,4 @@
use crate::{error::*, DatabaseConnection, SelectorTrait}; use crate::{error::*, DatabaseConnection, DbBackend, SelectorTrait};
use async_stream::stream; use async_stream::stream;
use futures::Stream; use futures::Stream;
use sea_query::{Alias, Expr, SelectStatement}; use sea_query::{Alias, Expr, SelectStatement};
@ -63,11 +63,8 @@ where
Some(res) => res, Some(res) => res,
None => return Ok(0), None => return Ok(0),
}; };
let num_items = match self.db { let num_items = match builder {
#[cfg(feature = "sqlx-postgres")] DbBackend::Postgres => result.try_get::<i64>("", "num_items")? as usize,
DatabaseConnection::SqlxPostgresPoolConnection(_) => {
result.try_get::<i64>("", "num_items")? as usize
}
_ => result.try_get::<i32>("", "num_items")? as usize, _ => result.try_get::<i32>("", "num_items")? as usize,
}; };
Ok(num_items) Ok(num_items)
@ -192,7 +189,7 @@ mod tests {
(db, vec![page1, page2, page3]) (db, vec![page1, page2, page3])
} }
fn setup_num_items() -> (DatabaseConnection, i32) { fn setup_num_items() -> (DatabaseConnection, i64) {
let num_items = 3; let num_items = 3;
let db = MockDatabase::new(DbBackend::Postgres) let db = MockDatabase::new(DbBackend::Postgres)
.append_query_results(vec![vec![maplit::btreemap! { .append_query_results(vec![vec![maplit::btreemap! {