Trim spaces when paginating raw SQL (#1094)
This commit is contained in:
parent
78904dcc6a
commit
5f1670329d
@ -251,7 +251,7 @@ where
|
|||||||
{
|
{
|
||||||
type Selector = S;
|
type Selector = S;
|
||||||
fn paginate(self, db: &'db C, page_size: u64) -> Paginator<'db, C, S> {
|
fn paginate(self, db: &'db C, page_size: u64) -> Paginator<'db, C, S> {
|
||||||
let sql = &self.stmt.sql[6..];
|
let sql = &self.stmt.sql.trim()[6..];
|
||||||
let mut query = SelectStatement::new();
|
let mut query = SelectStatement::new();
|
||||||
query.expr(if let Some(values) = self.stmt.values {
|
query.expr(if let Some(values) = self.stmt.values {
|
||||||
Expr::cust_with_values(sql, values.0)
|
Expr::cust_with_values(sql, values.0)
|
||||||
@ -306,6 +306,7 @@ mod tests {
|
|||||||
use crate::{DatabaseConnection, DbBackend, MockDatabase, Transaction};
|
use crate::{DatabaseConnection, DbBackend, MockDatabase, Transaction};
|
||||||
use futures::TryStreamExt;
|
use futures::TryStreamExt;
|
||||||
use once_cell::sync::Lazy;
|
use once_cell::sync::Lazy;
|
||||||
|
use pretty_assertions::assert_eq;
|
||||||
use sea_query::{Alias, Expr, SelectStatement, Value};
|
use sea_query::{Alias, Expr, SelectStatement, Value};
|
||||||
|
|
||||||
static RAW_STMT: Lazy<Statement> = Lazy::new(|| {
|
static RAW_STMT: Lazy<Statement> = Lazy::new(|| {
|
||||||
@ -726,4 +727,45 @@ mod tests {
|
|||||||
assert_eq!(db.into_transaction_log(), Transaction::wrap(stmts));
|
assert_eq!(db.into_transaction_log(), Transaction::wrap(stmts));
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[smol_potat::test]
|
||||||
|
async fn into_stream_raw_leading_spaces() -> Result<(), DbErr> {
|
||||||
|
let (db, pages) = setup();
|
||||||
|
|
||||||
|
let raw_stmt = Statement::from_sql_and_values(
|
||||||
|
DbBackend::Postgres,
|
||||||
|
r#" SELECT "fruit"."id", "fruit"."name", "fruit"."cake_id" FROM "fruit" "#,
|
||||||
|
vec![],
|
||||||
|
);
|
||||||
|
|
||||||
|
let mut fruit_stream = fruit::Entity::find()
|
||||||
|
.from_raw_sql(raw_stmt.clone())
|
||||||
|
.paginate(&db, 2)
|
||||||
|
.into_stream();
|
||||||
|
|
||||||
|
assert_eq!(fruit_stream.try_next().await?, Some(pages[0].clone()));
|
||||||
|
assert_eq!(fruit_stream.try_next().await?, Some(pages[1].clone()));
|
||||||
|
assert_eq!(fruit_stream.try_next().await?, None);
|
||||||
|
|
||||||
|
drop(fruit_stream);
|
||||||
|
|
||||||
|
let mut select = SelectStatement::new()
|
||||||
|
.exprs(vec![
|
||||||
|
Expr::tbl(fruit::Entity, fruit::Column::Id),
|
||||||
|
Expr::tbl(fruit::Entity, fruit::Column::Name),
|
||||||
|
Expr::tbl(fruit::Entity, fruit::Column::CakeId),
|
||||||
|
])
|
||||||
|
.from(fruit::Entity)
|
||||||
|
.to_owned();
|
||||||
|
|
||||||
|
let query_builder = db.get_database_backend();
|
||||||
|
let stmts = vec![
|
||||||
|
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)),
|
||||||
|
];
|
||||||
|
|
||||||
|
assert_eq!(db.into_transaction_log(), Transaction::wrap(stmts));
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user