Skip to main content

ReconfigurableLiveQuery

Struct ReconfigurableLiveQuery 

Source
pub struct ReconfigurableLiveQuery<Request, Value> { /* private fields */ }
Expand description

A tracked query whose absolute request can change without replacing the subscription.

Construct one with CovenHandle::subscribe_reconfigurable. Request changes and relevant commits are coalesced before each run. If the request changes while a run is in progress, that result is discarded and the latest request is evaluated before an event is returned.

A run caused only by committed changes whose value equals the last delivered value is not delivered: the query’s read dependencies are table-and-key granular, so a paged query (ORDER BY … LIMIT) reruns for any row change in its tables, and most of those reruns leave its window unchanged. The initial run, a run after a request change, and every error are always delivered; the first successful value after an error is too.

Implementations§

Source§

impl<Request, Value> ReconfigurableLiveQuery<Request, Value>
where Request: Clone + PartialEq + Send + Sync + 'static, Value: Send + 'static,

Source

pub fn process<P, R>(self, process: P) -> ReconfigurableLiveQuery<Request, R>
where P: Fn(&Request, Value) -> CovenResult<R> + Send + Sync + 'static, R: Send + 'static,

Process each fetched value on bounded workers after releasing its read connection. Dependencies and request revisions stay attached to the read; only processed values are compared when deciding whether to deliver.

The returned subscription starts with an initial result for the latest request, even if this subscription previously delivered values. Existing request handles continue to control it.

Source

pub fn requests(&self) -> LiveQueryRequests<Request>

Return a handle that can replace this subscription’s absolute request.

Source

pub async fn next(&mut self) -> ReconfigurableLiveQueryEvent<Request, Value>
where Value: Clone + PartialEq,

Return the initial event, or wait for a request change or relevant committed database change and return the next event.

Query errors are events and do not end the subscription. Cancelling the future preserves the pending request or database change. A commit-caused rerun whose value equals the last delivered value is not an event; the query goes back to waiting.

Auto Trait Implementations§

§

impl<Request, Value> Freeze for ReconfigurableLiveQuery<Request, Value>
where Request: Freeze, Value: Freeze,

§

impl<Request, Value> !RefUnwindSafe for ReconfigurableLiveQuery<Request, Value>

§

impl<Request, Value> Send for ReconfigurableLiveQuery<Request, Value>
where Request: Send + Sync, Value: Send,

§

impl<Request, Value> Sync for ReconfigurableLiveQuery<Request, Value>
where Request: Sync + Send, Value: Sync,

§

impl<Request, Value> Unpin for ReconfigurableLiveQuery<Request, Value>
where Request: Unpin, Value: Unpin,

§

impl<Request, Value> UnsafeUnpin for ReconfigurableLiveQuery<Request, Value>
where Request: UnsafeUnpin, Value: UnsafeUnpin,

§

impl<Request, Value> !UnwindSafe for ReconfigurableLiveQuery<Request, Value>

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
§

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

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,

§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,