pub struct OpWithTime<'a, Op: AtomicOperation + ?Sized> { /* private fields */ }Expand description
Wrapper that guarantees time is available, borrowing the underlying operation.
Implementations§
Source§impl<'a, Op: AtomicOperation + ?Sized> OpWithTime<'a, Op>
impl<'a, Op: AtomicOperation + ?Sized> OpWithTime<'a, Op>
Sourcepub async fn cached_or_db_time(op: &'a mut Op) -> Result<Self, Error>
pub async fn cached_or_db_time(op: &'a mut Op) -> Result<Self, Error>
Wraps an operation, using existing time if present, otherwise fetching from DB.
Priority order:
- Cached time from operation
- Manual clock time if the operation’s clock is manual
- Database time via
SELECT NOW()
Sourcepub fn cached_or_time(op: &'a mut Op, time: DateTime<Utc>) -> Self
pub fn cached_or_time(op: &'a mut Op, time: DateTime<Utc>) -> Self
Wraps with a specific time (uses existing if present).
Sourcepub fn cached_or_clock_time(op: &'a mut Op) -> Self
pub fn cached_or_clock_time(op: &'a mut Op) -> Self
Wraps using system time (uses existing if present).
Uses cached time if present, otherwise uses the operation’s clock.
pub fn now(&self) -> DateTime<Utc>
Trait Implementations§
Source§impl<'a, Op: AtomicOperation + ?Sized> AtomicOperation for OpWithTime<'a, Op>
impl<'a, Op: AtomicOperation + ?Sized> AtomicOperation for OpWithTime<'a, Op>
Source§fn maybe_now(&self) -> Option<DateTime<Utc>>
fn maybe_now(&self) -> Option<DateTime<Utc>>
Function for querying when the operation is taking place - if it is cached.
Source§fn clock(&self) -> &ClockHandle
fn clock(&self) -> &ClockHandle
Returns the clock handle for time operations. Read more
Source§fn connection(&mut self) -> &mut Connection
fn connection(&mut self) -> &mut Connection
Returns the raw underlying connection.
The desired way to represent this would actually be as a GAT: Read more
Source§fn add_commit_hook<H: CommitHook>(&mut self, hook: H) -> Result<(), H>
fn add_commit_hook<H: CommitHook>(&mut self, hook: H) -> Result<(), H>
Registers a commit hook that will run pre_commit before and post_commit after the transaction commits.
Returns Ok(()) if the hook was registered, Err(hook) if hooks are not supported.
Source§fn commit_hook<H: CommitHook>(&self) -> Option<&H>
fn commit_hook<H: CommitHook>(&self) -> Option<&H>
Typed shared access to the currently-accumulating commit hook of type
H,
if this operation supports commit hooks and one is registered.
Returns the hook a subsequent add_commit_hook::<H> call would merge into.Source§fn supports_hooks(&self) -> bool
fn supports_hooks(&self) -> bool
Whether this operation supports commit hooks. Read more
Source§fn savepoint_parts(&mut self) -> (&mut Connection, HookSlot<'_>)
fn savepoint_parts(&mut self) -> (&mut Connection, HookSlot<'_>)
Simultaneous access to the connection and the commit-hook buffer a
nested
SAVEPOINT folds into when released. Implementing this is the
only thing an operation must do to get the whole of
SavepointOperation — with_savepoint, begin_savepoint, and
arbitrary-depth nesting — for free. Read moreSource§fn as_executor(&mut self) -> OneTimeExecutor<'_, &mut Connection>
fn as_executor(&mut self) -> OneTimeExecutor<'_, &mut Connection>
Returns the
sqlx::Executor implementation that statements should be
executed through. Read moreSource§impl<'a, Op: AtomicOperation + ?Sized> AtomicOperationWithTime for OpWithTime<'a, Op>
impl<'a, Op: AtomicOperation + ?Sized> AtomicOperationWithTime for OpWithTime<'a, Op>
Auto Trait Implementations§
impl<'a, Op> !UnwindSafe for OpWithTime<'a, Op>
impl<'a, Op> Freeze for OpWithTime<'a, Op>
impl<'a, Op> RefUnwindSafe for OpWithTime<'a, Op>
impl<'a, Op> Send for OpWithTime<'a, Op>
impl<'a, Op> Sync for OpWithTime<'a, Op>
impl<'a, Op> Unpin for OpWithTime<'a, Op>
impl<'a, Op> UnsafeUnpin for OpWithTime<'a, Op>
Blanket Implementations§
Source§impl<T> BatchIsolation for Twhere
T: SavepointOperation + ?Sized,
impl<T> BatchIsolation for Twhere
T: SavepointOperation + ?Sized,
Source§fn run_isolated<'a, T, V, E, F>(
&'a mut self,
items: &'a [T],
f: F,
) -> impl Future<Output = Result<Vec<Result<V, E>>, Error>> + 'awhere
T: 'a,
V: 'a,
E: 'a,
F: AsyncFnOnce(&mut SavepointOp<'_>, &T) -> Result<V, E> + Clone + Sync + 'a,
fn run_isolated<'a, T, V, E, F>(
&'a mut self,
items: &'a [T],
f: F,
) -> impl Future<Output = Result<Vec<Result<V, E>>, Error>> + 'awhere
T: 'a,
V: 'a,
E: 'a,
F: AsyncFnOnce(&mut SavepointOp<'_>, &T) -> Result<V, E> + Clone + Sync + 'a,
Source§fn run_bisected<'a, T, E, F>(
&'a mut self,
items: &'a [T],
budget: BisectBudget,
f: F,
) -> impl Future<Output = Result<BisectOutcomes<E>, Error>> + 'awhere
T: 'a,
E: Error + 'static,
F: AsyncFnOnce(&mut SavepointOp<'_>, &[T]) -> Result<(), E> + Clone + Sync + 'a,
fn run_bisected<'a, T, E, F>(
&'a mut self,
items: &'a [T],
budget: BisectBudget,
f: F,
) -> impl Future<Output = Result<BisectOutcomes<E>, Error>> + 'awhere
T: 'a,
E: Error + 'static,
F: AsyncFnOnce(&mut SavepointOp<'_>, &[T]) -> Result<(), E> + Clone + Sync + 'a,
Probes the whole slice at once, bisecting only on failure. Read more
Source§fn run_bisected_with<'a, T, E, F, P>(
&'a mut self,
items: &'a [T],
budget: BisectBudget,
policy: TransientPolicy<P>,
f: F,
) -> impl Future<Output = Result<BisectOutcomes<E>, Error>> + 'a
fn run_bisected_with<'a, T, E, F, P>( &'a mut self, items: &'a [T], budget: BisectBudget, policy: TransientPolicy<P>, f: F, ) -> impl Future<Output = Result<BisectOutcomes<E>, Error>> + 'a
run_bisected with a caller-supplied notion of
which failures are transient. Read moreSource§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreSource§impl<T> SavepointOperation for Twhere
T: AtomicOperation + ?Sized,
impl<T> SavepointOperation for Twhere
T: AtomicOperation + ?Sized,
Source§fn with_savepoint<T, E, F>(
&mut self,
f: F,
) -> impl Future<Output = Result<Result<T, E>, Error>>
fn with_savepoint<T, E, F>( &mut self, f: F, ) -> impl Future<Output = Result<Result<T, E>, Error>>
Runs
f inside a SAVEPOINT, keeping its work on Ok and undoing it on
Err — see DbOp::with_savepoint for the
full contract, including the two layers of Result. Read moreSource§fn begin_savepoint(
&mut self,
) -> impl Future<Output = Result<SavepointOp<'_>, Error>> + Send
fn begin_savepoint( &mut self, ) -> impl Future<Output = Result<SavepointOp<'_>, Error>> + Send
Begins a
SAVEPOINT scope explicitly — see
DbOp::begin_savepoint. Must be finished
with release or
rollback; dropping it rolls back. Read more