Allows offset & limit to take Option<u64> (#1410)

* Allows offset & limit to take `Option<u64>`

* Takes `Into<Option<u64>>` instead

* Reset limit and offset when None value is provided
This commit is contained in:
Billy Chan 2023-01-27 13:03:13 +08:00 committed by GitHub
parent 9fbfd06663
commit 4e1a0e4a7c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -174,9 +174,41 @@ pub trait QuerySelect: Sized {
/// .to_string(), /// .to_string(),
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake` OFFSET 10" /// "SELECT `cake`.`id`, `cake`.`name` FROM `cake` OFFSET 10"
/// ); /// );
///
/// assert_eq!(
/// cake::Entity::find()
/// .offset(Some(10))
/// .build(DbBackend::MySql)
/// .to_string(),
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake` OFFSET 10"
/// );
///
/// assert_eq!(
/// cake::Entity::find()
/// .offset(None)
/// .build(DbBackend::MySql)
/// .to_string(),
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake`"
/// );
///
/// assert_eq!(
/// cake::Entity::find()
/// .offset(10)
/// .offset(None) // This will reset the offset
/// .build(DbBackend::MySql)
/// .to_string(),
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake`"
/// );
/// ``` /// ```
fn offset(mut self, offset: u64) -> Self { fn offset<T>(mut self, offset: T) -> Self
self.query().offset(offset); where
T: Into<Option<u64>>,
{
if let Some(offset) = offset.into() {
self.query().offset(offset);
} else {
self.query().reset_offset();
}
self self
} }
@ -191,9 +223,41 @@ pub trait QuerySelect: Sized {
/// .to_string(), /// .to_string(),
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake` LIMIT 10" /// "SELECT `cake`.`id`, `cake`.`name` FROM `cake` LIMIT 10"
/// ); /// );
///
/// assert_eq!(
/// cake::Entity::find()
/// .limit(Some(10))
/// .build(DbBackend::MySql)
/// .to_string(),
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake` LIMIT 10"
/// );
///
/// assert_eq!(
/// cake::Entity::find()
/// .limit(None)
/// .build(DbBackend::MySql)
/// .to_string(),
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake`"
/// );
///
/// assert_eq!(
/// cake::Entity::find()
/// .limit(10)
/// .limit(None)
/// .build(DbBackend::MySql)
/// .to_string(),
/// "SELECT `cake`.`id`, `cake`.`name` FROM `cake`"
/// );
/// ``` /// ```
fn limit(mut self, limit: u64) -> Self { fn limit<T>(mut self, limit: T) -> Self
self.query().limit(limit); where
T: Into<Option<u64>>,
{
if let Some(limit) = limit.into() {
self.query().limit(limit);
} else {
self.query().reset_limit();
}
self self
} }