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