Skip to main content

Cursor

Struct Cursor 

Source
pub struct Cursor<'a, E, X> { /* private fields */ }
Expand description

A forward-only keyset cursor for streaming large tables.

Rather than OFFSET (which the database must scan past, getting slower deeper in) or loading the whole table, the cursor remembers the last primary key it saw and asks for WHERE pk > ? ORDER BY pk LIMIT page_size. Every page is an index seek, so cost stays flat however deep you walk — and only one page is in memory at a time. This is the only iteration strategy that is also correct on D1-over-HTTP, which cannot hold a streaming server-side cursor.

ⓘ
let mut cur = repo::cursor::<User, _>(&exec, 500);
while let Some(page) = cur.next_page().await? {
    for user in page { /* ... */ }
}

Implementations§

Source§

impl<'a, E, X> Cursor<'a, E, X>
where E: Entity, X: Executor,

Source

pub fn after(self, pk: impl Into<Value>) -> Cursor<'a, E, X>

Resume from a known primary key — the next page starts strictly after pk. Lets a walk be checkpointed and continued across requests (e.g. one D1 HTTP call per invocation).

Source

pub async fn next_page(&mut self) -> Result<Option<Vec<E>>, Error>

Fetch the next page. Returns None once the table is exhausted. A final short page (fewer than page_size rows) marks the end, so the following call returns None without a wasted round-trip.

Source

pub fn checkpoint(&self) -> Option<&Value>

The primary key the next page will start strictly after, if a page has been read. Persist this to resume the walk later via after.

Auto Trait Implementations§

§

impl<'a, E, X> Freeze for Cursor<'a, E, X>

§

impl<'a, E, X> RefUnwindSafe for Cursor<'a, E, X>

§

impl<'a, E, X> Send for Cursor<'a, E, X>
where &'a X: Send, PhantomData<E>: Send,

§

impl<'a, E, X> Sync for Cursor<'a, E, X>
where &'a X: Sync, PhantomData<E>: Sync,

§

impl<'a, E, X> Unpin for Cursor<'a, E, X>

§

impl<'a, E, X> UnsafeUnpin for Cursor<'a, E, X>

§

impl<'a, E, X> UnwindSafe for Cursor<'a, E, X>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Event for T
where T: Send + Sync + 'static,

Source§

fn event_name() -> &'static str
where Self: Sized,

A human-readable name, used by wildcard listeners and log output. Always the Rust type path; see the trait docs.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more