Refactor
This commit is contained in:
parent
f9ba6eeb1f
commit
041d28aa26
@ -1,7 +1,7 @@
|
||||
use crate::{ExecErr, ExecResult, MockDatabaseConnection, QueryErr, QueryResult, Statement};
|
||||
use sea_query::{
|
||||
DeleteStatement, InsertStatement, MysqlQueryBuilder, PostgresQueryBuilder, SelectStatement,
|
||||
UpdateStatement,
|
||||
DeleteStatement, InsertStatement, MysqlQueryBuilder, PostgresQueryBuilder,
|
||||
QueryStatementBuilder, SelectStatement, UpdateStatement,
|
||||
};
|
||||
use std::{error::Error, fmt};
|
||||
|
||||
@ -102,31 +102,10 @@ impl DatabaseConnection {
|
||||
}
|
||||
|
||||
impl QueryBuilderBackend {
|
||||
pub fn build_select_statement(&self, statement: &SelectStatement) -> Statement {
|
||||
match self {
|
||||
Self::MySql => statement.build(MysqlQueryBuilder),
|
||||
Self::Postgres => statement.build(PostgresQueryBuilder),
|
||||
}
|
||||
.into()
|
||||
}
|
||||
|
||||
pub fn build_insert_statement(&self, statement: &InsertStatement) -> Statement {
|
||||
match self {
|
||||
Self::MySql => statement.build(MysqlQueryBuilder),
|
||||
Self::Postgres => statement.build(PostgresQueryBuilder),
|
||||
}
|
||||
.into()
|
||||
}
|
||||
|
||||
pub fn build_update_statement(&self, statement: &UpdateStatement) -> Statement {
|
||||
match self {
|
||||
Self::MySql => statement.build(MysqlQueryBuilder),
|
||||
Self::Postgres => statement.build(PostgresQueryBuilder),
|
||||
}
|
||||
.into()
|
||||
}
|
||||
|
||||
pub fn build_delete_statement(&self, statement: &DeleteStatement) -> Statement {
|
||||
pub fn build<S>(&self, statement: &S) -> Statement
|
||||
where
|
||||
S: QueryStatementBuilder,
|
||||
{
|
||||
match self {
|
||||
Self::MySql => statement.build(MysqlQueryBuilder),
|
||||
Self::Postgres => statement.build(PostgresQueryBuilder),
|
||||
|
@ -1,7 +1,4 @@
|
||||
use crate::{
|
||||
ActiveModelTrait, Database, DeleteMany, DeleteOne, EntityTrait, ExecErr, QueryBuilderBackend,
|
||||
Statement,
|
||||
};
|
||||
use crate::{ActiveModelTrait, Database, DeleteMany, DeleteOne, EntityTrait, ExecErr, Statement};
|
||||
use sea_query::DeleteStatement;
|
||||
use std::future::Future;
|
||||
|
||||
@ -46,13 +43,9 @@ impl Deleter {
|
||||
Self { query }
|
||||
}
|
||||
|
||||
pub fn build(&self, builder: QueryBuilderBackend) -> Statement {
|
||||
builder.build_delete_statement(&self.query)
|
||||
}
|
||||
|
||||
pub fn exec(self, db: &Database) -> impl Future<Output = Result<DeleteResult, ExecErr>> + '_ {
|
||||
let builder = db.get_query_builder_backend();
|
||||
exec_delete(self.build(builder), db)
|
||||
exec_delete(builder.build(&self.query), db)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,4 @@
|
||||
use crate::{
|
||||
ActiveModelTrait, Database, ExecErr, Insert, QueryBuilderBackend, QueryTrait, Statement,
|
||||
};
|
||||
use crate::{ActiveModelTrait, Database, ExecErr, Insert, QueryTrait, Statement};
|
||||
use sea_query::InsertStatement;
|
||||
use std::future::Future;
|
||||
|
||||
@ -29,13 +27,9 @@ impl Inserter {
|
||||
Self { query }
|
||||
}
|
||||
|
||||
pub fn build(&self, builder: QueryBuilderBackend) -> Statement {
|
||||
builder.build_insert_statement(&self.query)
|
||||
}
|
||||
|
||||
pub fn exec(self, db: &Database) -> impl Future<Output = Result<InsertResult, ExecErr>> + '_ {
|
||||
let builder = db.get_query_builder_backend();
|
||||
exec_insert(self.build(builder), db)
|
||||
exec_insert(builder.build(&self.query), db)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -31,7 +31,7 @@ where
|
||||
.offset((self.page_size * page) as u64)
|
||||
.to_owned();
|
||||
let builder = self.db.get_query_builder_backend();
|
||||
let stmt = builder.build_select_statement(&query);
|
||||
let stmt = builder.build(&query);
|
||||
let rows = self.db.get_connection().query_all(stmt).await?;
|
||||
let mut buffer = Vec::with_capacity(rows.len());
|
||||
for row in rows.into_iter() {
|
||||
@ -49,7 +49,7 @@ where
|
||||
/// Get the total number of pages
|
||||
pub async fn num_pages(&self) -> Result<usize, QueryErr> {
|
||||
let builder = self.db.get_query_builder_backend();
|
||||
let stmt = builder.build_select_statement(
|
||||
let stmt = builder.build(
|
||||
SelectStatement::new()
|
||||
.expr(Expr::cust("COUNT(*) AS num_rows"))
|
||||
.from_subquery(
|
||||
@ -170,10 +170,11 @@ mod tests {
|
||||
|
||||
let query_builder = db.get_query_builder_backend();
|
||||
let stmts = vec![
|
||||
query_builder.build_select_statement(select.clone().offset(0).limit(2)),
|
||||
query_builder.build_select_statement(select.clone().offset(2).limit(2)),
|
||||
query_builder.build_select_statement(select.offset(4).limit(2)),
|
||||
query_builder.build(select.clone().offset(0).limit(2)),
|
||||
query_builder.build(select.clone().offset(2).limit(2)),
|
||||
query_builder.build(select.offset(4).limit(2)),
|
||||
];
|
||||
|
||||
let mut mocker = db
|
||||
.get_connection()
|
||||
.as_mock_connection()
|
||||
@ -210,10 +211,11 @@ mod tests {
|
||||
|
||||
let query_builder = db.get_query_builder_backend();
|
||||
let stmts = vec![
|
||||
query_builder.build_select_statement(select.clone().offset(0).limit(2)),
|
||||
query_builder.build_select_statement(select.clone().offset(2).limit(2)),
|
||||
query_builder.build_select_statement(select.offset(4).limit(2)),
|
||||
query_builder.build(select.clone().offset(0).limit(2)),
|
||||
query_builder.build(select.clone().offset(2).limit(2)),
|
||||
query_builder.build(select.offset(4).limit(2)),
|
||||
];
|
||||
|
||||
let mut mocker = db
|
||||
.get_connection()
|
||||
.as_mock_connection()
|
||||
@ -251,7 +253,7 @@ mod tests {
|
||||
.to_owned();
|
||||
|
||||
let query_builder = db.get_query_builder_backend();
|
||||
let stmts = vec![query_builder.build_select_statement(&select)];
|
||||
let stmts = vec![query_builder.build(&select)];
|
||||
let mut mocker = db
|
||||
.get_connection()
|
||||
.as_mock_connection()
|
||||
@ -305,10 +307,11 @@ mod tests {
|
||||
|
||||
let query_builder = db.get_query_builder_backend();
|
||||
let stmts = vec![
|
||||
query_builder.build_select_statement(select.clone().offset(0).limit(2)),
|
||||
query_builder.build_select_statement(select.clone().offset(2).limit(2)),
|
||||
query_builder.build_select_statement(select.offset(4).limit(2)),
|
||||
query_builder.build(select.clone().offset(0).limit(2)),
|
||||
query_builder.build(select.clone().offset(2).limit(2)),
|
||||
query_builder.build(select.offset(4).limit(2)),
|
||||
];
|
||||
|
||||
let mut mocker = db
|
||||
.get_connection()
|
||||
.as_mock_connection()
|
||||
@ -343,10 +346,11 @@ mod tests {
|
||||
|
||||
let query_builder = db.get_query_builder_backend();
|
||||
let stmts = vec![
|
||||
query_builder.build_select_statement(select.clone().offset(0).limit(2)),
|
||||
query_builder.build_select_statement(select.clone().offset(2).limit(2)),
|
||||
query_builder.build_select_statement(select.offset(4).limit(2)),
|
||||
query_builder.build(select.clone().offset(0).limit(2)),
|
||||
query_builder.build(select.clone().offset(2).limit(2)),
|
||||
query_builder.build(select.offset(4).limit(2)),
|
||||
];
|
||||
|
||||
let mut mocker = db
|
||||
.get_connection()
|
||||
.as_mock_connection()
|
||||
|
@ -1,6 +1,6 @@
|
||||
use crate::{
|
||||
query::combine, Database, EntityTrait, FromQueryResult, JsonValue, Paginator,
|
||||
QueryBuilderBackend, QueryErr, QueryResult, Select, SelectTwo, Statement, TypeErr,
|
||||
query::combine, Database, EntityTrait, FromQueryResult, JsonValue, Paginator, QueryErr,
|
||||
QueryResult, Select, SelectTwo, TypeErr,
|
||||
};
|
||||
use sea_query::SelectStatement;
|
||||
use std::marker::PhantomData;
|
||||
@ -134,14 +134,13 @@ impl<S> Selector<S>
|
||||
where
|
||||
S: SelectorTrait,
|
||||
{
|
||||
pub fn build(&self, builder: QueryBuilderBackend) -> Statement {
|
||||
builder.build_select_statement(&self.query)
|
||||
}
|
||||
|
||||
pub async fn one(mut self, db: &Database) -> Result<Option<S::Item>, QueryErr> {
|
||||
let builder = db.get_query_builder_backend();
|
||||
self.query.limit(1);
|
||||
let row = db.get_connection().query_one(self.build(builder)).await?;
|
||||
let row = db
|
||||
.get_connection()
|
||||
.query_one(builder.build(&self.query))
|
||||
.await?;
|
||||
match row {
|
||||
Some(row) => Ok(Some(S::from_raw_query_result(row)?)),
|
||||
None => Ok(None),
|
||||
@ -150,7 +149,10 @@ where
|
||||
|
||||
pub async fn all(self, db: &Database) -> Result<Vec<S::Item>, QueryErr> {
|
||||
let builder = db.get_query_builder_backend();
|
||||
let rows = db.get_connection().query_all(self.build(builder)).await?;
|
||||
let rows = db
|
||||
.get_connection()
|
||||
.query_all(builder.build(&self.query))
|
||||
.await?;
|
||||
let mut models = Vec::new();
|
||||
for row in rows.into_iter() {
|
||||
models.push(S::from_raw_query_result(row)?);
|
||||
|
@ -1,7 +1,4 @@
|
||||
use crate::{
|
||||
ActiveModelTrait, Database, EntityTrait, ExecErr, QueryBuilderBackend, Statement, UpdateMany,
|
||||
UpdateOne,
|
||||
};
|
||||
use crate::{ActiveModelTrait, Database, EntityTrait, ExecErr, Statement, UpdateMany, UpdateOne};
|
||||
use sea_query::UpdateStatement;
|
||||
use std::future::Future;
|
||||
|
||||
@ -43,13 +40,9 @@ impl Updater {
|
||||
Self { query }
|
||||
}
|
||||
|
||||
pub fn build(&self, builder: QueryBuilderBackend) -> Statement {
|
||||
builder.build_update_statement(&self.query)
|
||||
}
|
||||
|
||||
pub fn exec(self, db: &Database) -> impl Future<Output = Result<UpdateResult, ExecErr>> + '_ {
|
||||
let builder = db.get_query_builder_backend();
|
||||
exec_update(self.build(builder), db)
|
||||
exec_update(builder.build(&self.query), db)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user