use crate::{
db::{cursor::CursorPlanError, query::plan::OrderDirection},
value::Value,
};
use serde::Deserialize;
use std::cmp::Ordering;
#[derive(Clone, Debug, Deserialize, Eq, PartialEq)]
pub(in crate::db) enum CursorBoundarySlot {
Missing,
Present(Value),
}
#[derive(Clone, Debug, Deserialize, Eq, PartialEq)]
pub(in crate::db) struct CursorBoundary {
pub(in crate::db) slots: Vec<CursorBoundarySlot>,
}
#[must_use]
pub(in crate::db) const fn apply_order_direction(
ordering: Ordering,
direction: OrderDirection,
) -> Ordering {
match direction {
OrderDirection::Asc => ordering,
OrderDirection::Desc => ordering.reverse(),
}
}
pub(in crate::db::cursor) const fn validate_cursor_window_offset(
expected_initial_offset: u32,
actual_initial_offset: u32,
) -> Result<(), CursorPlanError> {
if actual_initial_offset != expected_initial_offset {
return Err(CursorPlanError::continuation_cursor_window_mismatch(
expected_initial_offset,
actual_initial_offset,
));
}
Ok(())
}