use crate::db::{
cursor::IndexScanContinuationInput,
direction::Direction,
executor::{LoweredIndexPrefixSpec, LoweredIndexRangeSpec, LoweredKey},
};
#[derive(Clone, Copy)]
pub(in crate::db::executor) struct AccessStreamBindings<'a> {
pub(in crate::db::executor) index_prefix_specs: &'a [LoweredIndexPrefixSpec],
pub(in crate::db::executor) index_range_specs: &'a [LoweredIndexRangeSpec],
pub(in crate::db::executor) continuation: AccessScanContinuationInput<'a>,
}
impl<'a> AccessStreamBindings<'a> {
#[must_use]
pub(in crate::db::executor) const fn new(
index_prefix_specs: &'a [LoweredIndexPrefixSpec],
index_range_specs: &'a [LoweredIndexRangeSpec],
continuation: AccessScanContinuationInput<'a>,
) -> Self {
Self {
index_prefix_specs,
index_range_specs,
continuation,
}
}
#[must_use]
pub(in crate::db::executor) const fn no_index(direction: Direction) -> Self {
Self::new(&[], &[], AccessScanContinuationInput::new(None, direction))
}
#[must_use]
pub(in crate::db::executor) const fn with_index_prefix(
index_prefix_spec: &'a LoweredIndexPrefixSpec,
direction: Direction,
) -> Self {
Self::new(
std::slice::from_ref(index_prefix_spec),
&[],
AccessScanContinuationInput::new(None, direction),
)
}
#[must_use]
pub(in crate::db::executor) const fn with_index_range_continuation(
index_range_spec: &'a LoweredIndexRangeSpec,
continuation: AccessScanContinuationInput<'a>,
) -> Self {
Self::new(&[], std::slice::from_ref(index_range_spec), continuation)
}
#[must_use]
pub(in crate::db::executor) const fn direction(&self) -> Direction {
self.continuation.direction()
}
}
#[derive(Clone, Copy)]
pub(in crate::db::executor) struct AccessScanContinuationInput<'a> {
index_scan_continuation: IndexScanContinuationInput<'a>,
}
impl<'a> AccessScanContinuationInput<'a> {
#[must_use]
pub(in crate::db::executor) const fn new(
anchor: Option<&'a LoweredKey>,
direction: Direction,
) -> Self {
Self {
index_scan_continuation: IndexScanContinuationInput::new(anchor, direction),
}
}
#[must_use]
pub(in crate::db::executor) const fn initial_asc() -> Self {
Self::new(None, Direction::Asc)
}
#[must_use]
pub(in crate::db::executor) const fn direction(&self) -> Direction {
self.index_scan_continuation.direction()
}
#[must_use]
pub(in crate::db::executor) const fn index_scan_continuation(
&self,
) -> IndexScanContinuationInput<'a> {
self.index_scan_continuation
}
}