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<WriteLocks>)
pub fn into_ops_and_lock_guard( self, ) -> (Option<TransactionOps<T>>, Option<WriteLocks>)
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 try_grant_write_locks(
&mut self,
guards: WriteLocks,
) -> Result<(), &WriteLocks>
pub fn try_grant_write_locks( &mut self, guards: WriteLocks, ) -> Result<(), &WriteLocks>
Grants the writes lock to the inner transaction, returning an error if the transaction has already been granted write locks.
§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 write_locks(&self) -> Option<&WriteLocks>
pub fn write_locks(&self) -> Option<&WriteLocks>
Returns the currently held WriteLocks
, if this transaction holds any.
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).
The DDL
variant is an exception and does not merge operations, but instead overwrites the
old ops with the new ops. This is correct because it is only used in conjunction with the
Dry Run catalog op which returns an error containing all of the ops, and those ops are
passed to this function which then overwrites.
§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<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<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
impl<'a, S, T> Semigroup<&'a S> for Twhere
T: Semigroup<S>,
source§fn plus_equals(&mut self, rhs: &&'a S)
fn plus_equals(&mut self, rhs: &&'a S)
std::ops::AddAssign
, for types that do not implement AddAssign
.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.