Enum mz_adapter::session::TransactionStatus
source · pub enum TransactionStatus<T> {
Default,
Started(Transaction<T>),
InTransaction(Transaction<T>),
InTransactionImplicit(Transaction<T>),
Failed(Transaction<T>),
}
Expand description
The transaction status of a session.
PostgreSQL’s transaction states are in backend/access/transam/xact.c.
Variants§
Default
Idle. Matches TBLOCK_DEFAULT
.
Started(Transaction<T>)
Running a single-query transaction. Matches
TBLOCK_STARTED
. In PostgreSQL, when using the extended query protocol, this
may be upgraded into multi-statement implicit query (see Self::InTransactionImplicit
).
Additionally, some statements may trigger an eager commit of the implicit transaction,
see: https://git.postgresql.org/gitweb/?p=postgresql.git&a=commitdiff&h=f92944137. In
Materialize however, we eagerly commit all statements outside of an explicit transaction
when using the extended query protocol. Therefore, we can guarantee that this state will
always be a single-query transaction and never be upgraded into a multi-statement implicit
query.
InTransaction(Transaction<T>)
Currently in a transaction issued from a BEGIN
. Matches TBLOCK_INPROGRESS
.
InTransactionImplicit(Transaction<T>)
Currently in an implicit transaction started from a multi-statement query
with more than 1 statements. Matches TBLOCK_IMPLICIT_INPROGRESS
.
Failed(Transaction<T>)
In a failed transaction. Matches TBLOCK_ABORT
.
Implementations§
source§impl<T: TimestampManipulation> TransactionStatus<T>
impl<T: TimestampManipulation> TransactionStatus<T>
sourcepub fn into_ops_and_lock_guard(
self
) -> (Option<TransactionOps<T>>, Option<OwnedMutexGuard<()>>)
pub fn into_ops_and_lock_guard( self ) -> (Option<TransactionOps<T>>, Option<OwnedMutexGuard<()>>)
Extracts the inner transaction ops and write lock guard if not failed.
sourcepub fn inner(&self) -> Option<&Transaction<T>>
pub fn inner(&self) -> Option<&Transaction<T>>
Exposes the inner transaction.
sourcepub fn inner_mut(&mut self) -> Option<&mut Transaction<T>>
pub fn inner_mut(&mut self) -> Option<&mut Transaction<T>>
Exposes the inner transaction.
sourcepub fn is_implicit(&self) -> bool
pub fn is_implicit(&self) -> bool
Expresses whether or not the transaction was implicitly started. However, its negation does not imply explicitly started.
sourcepub fn is_in_multi_statement_transaction(&self) -> bool
pub fn is_in_multi_statement_transaction(&self) -> bool
Whether the transaction may contain multiple statements.
sourcepub fn in_immediate_multi_stmt_txn(&self, when: &QueryWhen) -> bool
pub fn in_immediate_multi_stmt_txn(&self, when: &QueryWhen) -> bool
Whether the transaction is in a multi-statement, immediate transaction.
sourcepub fn grant_write_lock(&mut self, guard: OwnedMutexGuard<()>)
pub fn grant_write_lock(&mut self, guard: OwnedMutexGuard<()>)
Grants the write lock to the inner transaction.
§Panics
If self
is TransactionStatus::Default
, which indicates that the
transaction is idle, which is not appropriate to assign the
coordinator’s write lock to.
sourcepub fn catalog_state(&self) -> Option<&CatalogState>
pub fn catalog_state(&self) -> Option<&CatalogState>
Snapshot of the catalog that reflects DDL operations run in this transaction.
sourcepub fn contains_ops(&self) -> bool
pub fn contains_ops(&self) -> bool
Reports whether any operations have been executed as part of this transaction
sourcepub fn add_ops(
&mut self,
add_ops: TransactionOps<T>
) -> Result<(), AdapterError>
pub fn add_ops( &mut self, add_ops: TransactionOps<T> ) -> Result<(), AdapterError>
Adds operations to the current transaction. An error is produced if they cannot be merged (i.e., a timestamp-dependent read cannot be merged to an insert).
§Panics
If the operations are compatible but the operation metadata doesn’t match. Such as reads at different timestamps, reads on different timelines, reads on different clusters, etc. It’s up to the caller to make sure these are aligned.
Trait Implementations§
source§impl<T: Debug> Debug for TransactionStatus<T>
impl<T: Debug> Debug for TransactionStatus<T>
source§impl<T> Default for TransactionStatus<T>
impl<T> Default for TransactionStatus<T>
source§impl<T> From<&TransactionStatus<T>> for TransactionCode
impl<T> From<&TransactionStatus<T>> for TransactionCode
source§fn from(status: &TransactionStatus<T>) -> TransactionCode
fn from(status: &TransactionStatus<T>) -> TransactionCode
Convert from the Session’s version
Auto Trait Implementations§
impl<T> Freeze for TransactionStatus<T>where
T: Freeze,
impl<T> !RefUnwindSafe for TransactionStatus<T>
impl<T> Send for TransactionStatus<T>where
T: Send,
impl<T> Sync for TransactionStatus<T>where
T: Sync,
impl<T> Unpin for TransactionStatus<T>where
T: Unpin,
impl<T> !UnwindSafe for TransactionStatus<T>
Blanket Implementations§
source§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
source§impl<R, O, T> CopyOnto<ConsecutiveOffsetPairs<R, O>> for T
impl<R, O, T> CopyOnto<ConsecutiveOffsetPairs<R, O>> for T
source§fn copy_onto(
self,
target: &mut ConsecutiveOffsetPairs<R, O>
) -> <ConsecutiveOffsetPairs<R, O> as Region>::Index
fn copy_onto( self, target: &mut ConsecutiveOffsetPairs<R, O> ) -> <ConsecutiveOffsetPairs<R, O> as Region>::Index
source§impl<T> FmtForward for T
impl<T> FmtForward for T
source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.source§impl<T> FutureExt for T
impl<T> FutureExt for T
source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request
source§impl<T, U> OverrideFrom<Option<&T>> for Uwhere
U: OverrideFrom<T>,
impl<T, U> OverrideFrom<Option<&T>> for Uwhere
U: OverrideFrom<T>,
source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> R
source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
impl<P, R> ProtoType<R> for Pwhere
R: RustType<P>,
source§fn into_rust(self) -> Result<R, TryFromProtoError>
fn into_rust(self) -> Result<R, TryFromProtoError>
RustType::from_proto
.source§fn from_rust(rust: &R) -> P
fn from_rust(rust: &R) -> P
RustType::into_proto
.source§impl<T> Tap for T
impl<T> Tap for T
source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moresource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moresource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moresource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moresource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.