parent
0ff000b8f8
commit
c8c02f6f6e
@ -313,7 +313,7 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Drop all tables
|
// Drop all tables
|
||||||
let stmt = query_tables(db);
|
let stmt = query_tables(db).await;
|
||||||
let rows = db.query_all(db_backend.build(&stmt)).await?;
|
let rows = db.query_all(db_backend.build(&stmt)).await?;
|
||||||
for row in rows.into_iter() {
|
for row in rows.into_iter() {
|
||||||
let table_name: String = row.try_get("", "table_name")?;
|
let table_name: String = row.try_get("", "table_name")?;
|
||||||
@ -437,7 +437,7 @@ where
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn query_tables<C>(db: &C) -> SelectStatement
|
async fn query_tables<C>(db: &C) -> SelectStatement
|
||||||
where
|
where
|
||||||
C: ConnectionTrait,
|
C: ConnectionTrait,
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,4 @@
|
|||||||
use crate::{
|
use crate::{error::*, ActiveModelTrait, ConnectionTrait, DeleteMany, DeleteOne, EntityTrait};
|
||||||
error::*, ActiveModelTrait, ConnectionTrait, DeleteMany, DeleteOne, EntityTrait, Statement,
|
|
||||||
};
|
|
||||||
use sea_query::DeleteStatement;
|
use sea_query::DeleteStatement;
|
||||||
use std::future::Future;
|
use std::future::Future;
|
||||||
|
|
||||||
@ -56,8 +54,7 @@ impl Deleter {
|
|||||||
where
|
where
|
||||||
C: ConnectionTrait,
|
C: ConnectionTrait,
|
||||||
{
|
{
|
||||||
let builder = db.get_database_backend();
|
exec_delete(self.query, db)
|
||||||
exec_delete(builder.build(&self.query), db)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,10 +65,13 @@ where
|
|||||||
Deleter::new(query).exec(db).await
|
Deleter::new(query).exec(db).await
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn exec_delete<C>(statement: Statement, db: &C) -> Result<DeleteResult, DbErr>
|
async fn exec_delete<C>(query: DeleteStatement, db: &C) -> Result<DeleteResult, DbErr>
|
||||||
where
|
where
|
||||||
C: ConnectionTrait,
|
C: ConnectionTrait,
|
||||||
{
|
{
|
||||||
|
let builder = db.get_database_backend();
|
||||||
|
let statement = builder.build(&query);
|
||||||
|
|
||||||
let result = db.execute(statement).await?;
|
let result = db.execute(statement).await?;
|
||||||
Ok(DeleteResult {
|
Ok(DeleteResult {
|
||||||
rows_affected: result.rows_affected(),
|
rows_affected: result.rows_affected(),
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
use crate::{
|
use crate::{
|
||||||
error::*, ActiveModelTrait, ColumnTrait, ConnectionTrait, EntityTrait, Insert, IntoActiveModel,
|
error::*, ActiveModelTrait, ColumnTrait, ConnectionTrait, EntityTrait, Insert, IntoActiveModel,
|
||||||
Iterable, PrimaryKeyToColumn, PrimaryKeyTrait, SelectModel, SelectorRaw, Statement, TryFromU64,
|
Iterable, PrimaryKeyToColumn, PrimaryKeyTrait, SelectModel, SelectorRaw, TryFromU64, TryInsert,
|
||||||
TryInsert,
|
|
||||||
};
|
};
|
||||||
use sea_query::{FromValueTuple, Iden, InsertStatement, Query, ValueTuple};
|
use sea_query::{FromValueTuple, Iden, InsertStatement, Query, ValueTuple};
|
||||||
use std::{future::Future, marker::PhantomData};
|
use std::{future::Future, marker::PhantomData};
|
||||||
@ -176,8 +175,7 @@ where
|
|||||||
C: ConnectionTrait,
|
C: ConnectionTrait,
|
||||||
A: 'a,
|
A: 'a,
|
||||||
{
|
{
|
||||||
let builder = db.get_database_backend();
|
exec_insert(self.primary_key, self.query, db)
|
||||||
exec_insert(self.primary_key, builder.build(&self.query), db)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Execute an insert operation
|
/// Execute an insert operation
|
||||||
@ -208,13 +206,16 @@ where
|
|||||||
|
|
||||||
async fn exec_insert<A, C>(
|
async fn exec_insert<A, C>(
|
||||||
primary_key: Option<ValueTuple>,
|
primary_key: Option<ValueTuple>,
|
||||||
statement: Statement,
|
statement: InsertStatement,
|
||||||
db: &C,
|
db: &C,
|
||||||
) -> Result<InsertResult<A>, DbErr>
|
) -> Result<InsertResult<A>, DbErr>
|
||||||
where
|
where
|
||||||
C: ConnectionTrait,
|
C: ConnectionTrait,
|
||||||
A: ActiveModelTrait,
|
A: ActiveModelTrait,
|
||||||
{
|
{
|
||||||
|
let db_backend = db.get_database_backend();
|
||||||
|
let statement = db_backend.build(&statement);
|
||||||
|
|
||||||
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;
|
||||||
|
|
||||||
@ -259,7 +260,8 @@ where
|
|||||||
C: ConnectionTrait,
|
C: ConnectionTrait,
|
||||||
{
|
{
|
||||||
let db_backend = db.get_database_backend();
|
let db_backend = db.get_database_backend();
|
||||||
let exec_result = db.execute(db_backend.build(&insert_statement)).await?;
|
let insert_statement = db_backend.build(&insert_statement);
|
||||||
|
let exec_result = db.execute(insert_statement).await?;
|
||||||
Ok(exec_result.rows_affected())
|
Ok(exec_result.rows_affected())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -281,15 +283,15 @@ where
|
|||||||
.map(|c| c.select_as(c.into_returning_expr(db_backend))),
|
.map(|c| c.select_as(c.into_returning_expr(db_backend))),
|
||||||
);
|
);
|
||||||
insert_statement.returning(returning);
|
insert_statement.returning(returning);
|
||||||
|
let insert_statement = db_backend.build(&insert_statement);
|
||||||
SelectorRaw::<SelectModel<<A::Entity as EntityTrait>::Model>>::from_statement(
|
SelectorRaw::<SelectModel<<A::Entity as EntityTrait>::Model>>::from_statement(
|
||||||
db_backend.build(&insert_statement),
|
insert_statement,
|
||||||
)
|
)
|
||||||
.one(db)
|
.one(db)
|
||||||
.await?
|
.await?
|
||||||
}
|
}
|
||||||
false => {
|
false => {
|
||||||
let insert_res =
|
let insert_res = exec_insert::<A, _>(primary_key, insert_statement, db).await?;
|
||||||
exec_insert::<A, _>(primary_key, db_backend.build(&insert_statement), db).await?;
|
|
||||||
<A::Entity as EntityTrait>::find_by_id(insert_res.last_insert_id)
|
<A::Entity as EntityTrait>::find_by_id(insert_res.last_insert_id)
|
||||||
.one(db)
|
.one(db)
|
||||||
.await?
|
.await?
|
||||||
|
@ -67,8 +67,7 @@ where
|
|||||||
/// Get the total number of items
|
/// Get the total number of items
|
||||||
pub async fn num_items(&self) -> Result<u64, DbErr> {
|
pub async fn num_items(&self) -> Result<u64, DbErr> {
|
||||||
let builder = self.db.get_database_backend();
|
let builder = self.db.get_database_backend();
|
||||||
let stmt = builder.build(
|
let stmt = SelectStatement::new()
|
||||||
SelectStatement::new()
|
|
||||||
.expr(Expr::cust("COUNT(*) AS num_items"))
|
.expr(Expr::cust("COUNT(*) AS num_items"))
|
||||||
.from_subquery(
|
.from_subquery(
|
||||||
self.query
|
self.query
|
||||||
@ -78,8 +77,9 @@ where
|
|||||||
.clear_order_by()
|
.clear_order_by()
|
||||||
.to_owned(),
|
.to_owned(),
|
||||||
Alias::new("sub_query"),
|
Alias::new("sub_query"),
|
||||||
),
|
)
|
||||||
);
|
.to_owned();
|
||||||
|
let stmt = builder.build(&stmt);
|
||||||
let result = match self.db.query_one(stmt).await? {
|
let result = match self.db.query_one(stmt).await? {
|
||||||
Some(res) => res,
|
Some(res) => res,
|
||||||
None => return Ok(0),
|
None => return Ok(0),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user