use crate::{
db::query::{
fluent::load::FluentLoadQuery,
intent::{IntentError, QueryError},
plan::{
FieldSlot, resolve_aggregate_target_field_slot, validate_fluent_non_paged_mode,
validate_fluent_paged_mode,
},
},
traits::EntityKind,
};
impl<E> FluentLoadQuery<'_, E>
where
E: EntityKind,
{
pub(super) fn resolve_non_paged_slot(
&self,
field: impl AsRef<str>,
) -> Result<FieldSlot, QueryError> {
self.ensure_non_paged_mode_ready()?;
resolve_aggregate_target_field_slot(E::MODEL, field.as_ref())
}
pub(super) fn ensure_cursor_mode_ready(&self) -> Result<(), QueryError> {
if self.cursor_token.is_some() {
validate_fluent_paged_mode(
self.query.has_grouping(),
self.query.has_explicit_order(),
self.query.load_spec(),
)
.map_err(IntentError::from)
.map_err(QueryError::intent)?;
}
Ok(())
}
pub(super) fn ensure_paged_mode_ready(&self) -> Result<(), QueryError> {
validate_fluent_paged_mode(
self.query.has_grouping(),
self.query.has_explicit_order(),
self.query.load_spec(),
)
.map_err(IntentError::from)
.map_err(QueryError::intent)
}
pub(super) fn ensure_non_paged_mode_ready(&self) -> Result<(), QueryError> {
validate_fluent_non_paged_mode(self.cursor_token.is_some(), self.query.has_grouping())
.map_err(IntentError::from)
.map_err(QueryError::intent)
}
}