Sort NULL values as smallest value (devices and gateways last seen).
Some checks failed
CI / tests (postgres) (push) Has been cancelled
CI / tests (sqlite) (push) Has been cancelled
CI / dist (postgres) (push) Has been cancelled
CI / dist (sqlite) (push) Has been cancelled

Fixes #683.
This commit is contained in:
Orne Brocaar 2025-05-26 14:48:54 +01:00
parent 26cca09ce8
commit 46bb01ccdc
2 changed files with 52 additions and 12 deletions

View File

@ -730,17 +730,37 @@ pub async fn list(
true => match order_by {
OrderBy::Name => q.order_by(device::dsl::name.desc()),
OrderBy::DevEui => q.order_by(device::dsl::dev_eui.desc()),
OrderBy::LastSeenAt => q
.order_by(device::dsl::last_seen_at.desc())
.then_order_by(device::dsl::name),
OrderBy::LastSeenAt => {
#[cfg(feature = "postgres")]
{
q.order_by(device::dsl::last_seen_at.desc().nulls_last())
.then_order_by(device::dsl::name)
}
#[cfg(feature = "sqlite")]
{
q.order_by(device::dsl::last_seen_at.desc())
.then_order_by(device::dsl::name)
}
}
OrderBy::DeviceProfileName => q.order_by(device_profile::dsl::name.desc()),
},
false => match order_by {
OrderBy::Name => q.order_by(device::dsl::name),
OrderBy::DevEui => q.order_by(device::dsl::dev_eui),
OrderBy::LastSeenAt => q
.order_by(device::dsl::last_seen_at)
.then_order_by(device::dsl::name),
OrderBy::LastSeenAt => {
#[cfg(feature = "postgres")]
{
q.order_by(device::dsl::last_seen_at.asc().nulls_first())
.then_order_by(device::dsl::name)
}
#[cfg(feature = "sqlite")]
{
q.order_by(device::dsl::last_seen_at.asc())
.then_order_by(device::dsl::name)
}
}
OrderBy::DeviceProfileName => q.order_by(device_profile::dsl::name),
},
};

View File

@ -365,16 +365,36 @@ pub async fn list(
true => match order_by {
OrderBy::Name => q.order_by(gateway::dsl::name.desc()),
OrderBy::GatewayId => q.order_by(gateway::dsl::gateway_id.desc()),
OrderBy::LastSeenAt => q
.order_by(gateway::dsl::last_seen_at.desc())
.then_order_by(gateway::dsl::name),
OrderBy::LastSeenAt => {
#[cfg(feature = "postgres")]
{
q.order_by(gateway::dsl::last_seen_at.desc().nulls_last())
.then_order_by(gateway::dsl::name)
}
#[cfg(feature = "sqlite")]
{
q.order_by(gateway::dsl::last_seen_at.desc())
.then_order_by(gateway::dsl::name)
}
}
},
false => match order_by {
OrderBy::Name => q.order_by(gateway::dsl::name),
OrderBy::GatewayId => q.order_by(gateway::dsl::gateway_id),
OrderBy::LastSeenAt => q
.order_by(gateway::dsl::last_seen_at)
.then_order_by(gateway::dsl::name),
OrderBy::LastSeenAt => {
#[cfg(feature = "postgres")]
{
q.order_by(gateway::dsl::last_seen_at.asc().nulls_first())
.then_order_by(gateway::dsl::name)
}
#[cfg(feature = "sqlite")]
{
q.order_by(gateway::dsl::last_seen_at.asc())
.then_order_by(gateway::dsl::name)
}
}
},
};