Skip to content

Commit ef0521f

Browse files
committed
Refactor paginator query to use Expr::exists
1 parent 065fa76 commit ef0521f

File tree

1 file changed

+20
-14
lines changed

1 file changed

+20
-14
lines changed

src/executor/paginator.rs

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -234,23 +234,29 @@ where
234234
let paginator = self.paginate(db, 1);
235235
let builder = db.get_database_backend();
236236
let stmt = SelectStatement::new()
237-
.expr(Expr::cust("1"))
238-
.from_subquery(
239-
paginator
240-
.query
241-
.clone()
242-
.reset_limit()
243-
.reset_offset()
244-
.clear_order_by()
245-
.limit(1)
246-
.to_owned(),
247-
"sub_query",
237+
.expr_as(
238+
Expr::exists(
239+
paginator
240+
.query
241+
.clone()
242+
.reset_limit()
243+
.reset_offset()
244+
.clear_order_by()
245+
.limit(1)
246+
.to_owned(),
247+
),
248+
"record_exists",
248249
)
249-
.limit(1)
250250
.to_owned();
251251
let stmt = builder.build(&stmt);
252-
let result = db.query_one(stmt).await?;
253-
Ok(result.is_some())
252+
let result = db.query_one(stmt).await?.ok_or(DbErr::RecordNotFound(
253+
"EXISTS query returned no result".to_owned(),
254+
))?;
255+
let exists = match builder {
256+
DbBackend::Postgres => result.try_get::<bool>("", "record_exists")?,
257+
_ => result.try_get::<i32>("", "record_exists")? != 0,
258+
};
259+
Ok(exists)
254260
}
255261
}
256262

0 commit comments

Comments
 (0)