pub struct TransactionSession<BaseCtx, StagingCtx>where
BaseCtx: TransactionContext + 'static,
StagingCtx: TransactionContext + 'static,{ /* private fields */ }Expand description
A session handle for transaction management.
When dropped, automatically rolls back any active transaction.
Implementations§
Source§impl<BaseCtx, StagingCtx> TransactionSession<BaseCtx, StagingCtx>where
BaseCtx: TransactionContext + 'static,
StagingCtx: TransactionContext + 'static,
impl<BaseCtx, StagingCtx> TransactionSession<BaseCtx, StagingCtx>where
BaseCtx: TransactionContext + 'static,
StagingCtx: TransactionContext + 'static,
pub fn new( context: Arc<BaseCtx>, session_id: u64, transactions: Arc<Mutex<HashMap<u64, SessionTransaction<BaseCtx, StagingCtx>>>>, txn_manager: Arc<TxnIdManager>, ) -> TransactionSession<BaseCtx, StagingCtx>
Sourcepub fn clone_session(&self) -> TransactionSession<BaseCtx, StagingCtx>
pub fn clone_session(&self) -> TransactionSession<BaseCtx, StagingCtx>
Clone this session (reuses the same session_id and shared transaction map). This is necessary to maintain transaction state across Engine clones.
Sourcepub fn session_id(&self) -> u64
pub fn session_id(&self) -> u64
Get the session ID.
Sourcepub fn has_active_transaction(&self) -> bool
pub fn has_active_transaction(&self) -> bool
Check if this session has an active transaction.
Sourcepub fn is_aborted(&self) -> bool
pub fn is_aborted(&self) -> bool
Check if the current transaction has been aborted due to an error.
Sourcepub fn is_table_created_in_transaction(&self, table_name: &str) -> bool
pub fn is_table_created_in_transaction(&self, table_name: &str) -> bool
Check if a table was created in the current active transaction.
Returns true if there’s an active transaction and the table exists in its new_tables set.
Sourcepub fn table_column_specs_from_transaction(
&self,
table_name: &str,
) -> Option<Vec<PlanColumnSpec>>
pub fn table_column_specs_from_transaction( &self, table_name: &str, ) -> Option<Vec<PlanColumnSpec>>
Get column specifications for a table created in the current transaction.
Returns None if there’s no active transaction or the table wasn’t created in it.
Sourcepub fn tables_referencing_in_transaction(
&self,
referenced_table: &str,
) -> Vec<String>
pub fn tables_referencing_in_transaction( &self, referenced_table: &str, ) -> Vec<String>
Get tables that reference the given table via foreign keys created in the current transaction. Returns an empty vector if there’s no active transaction or no transactional FKs reference this table.
Sourcepub fn has_table_locked_by_other_session(&self, table_name: &str) -> bool
pub fn has_table_locked_by_other_session(&self, table_name: &str) -> bool
Check if a table is locked by another active session’s transaction. Returns true if ANY other session has this table in their locked_table_names.
Sourcepub fn abort_transaction(&self)
pub fn abort_transaction(&self)
Mark the current transaction as aborted due to an error. This should be called when any error occurs during a transaction.
Sourcepub fn begin_transaction(
&self,
staging: Arc<StagingCtx>,
) -> Result<TransactionResult<<BaseCtx as TransactionContext>::Pager>, Error>
pub fn begin_transaction( &self, staging: Arc<StagingCtx>, ) -> Result<TransactionResult<<BaseCtx as TransactionContext>::Pager>, Error>
Begin a transaction in this session.
Sourcepub fn commit_transaction(
&self,
) -> Result<(TransactionResult<<BaseCtx as TransactionContext>::Pager>, Vec<PlanOperation>), Error>
pub fn commit_transaction( &self, ) -> Result<(TransactionResult<<BaseCtx as TransactionContext>::Pager>, Vec<PlanOperation>), Error>
Commit the transaction in this session. If the transaction is aborted, this acts as a ROLLBACK instead.
Sourcepub fn rollback_transaction(
&self,
) -> Result<TransactionResult<<BaseCtx as TransactionContext>::Pager>, Error>
pub fn rollback_transaction( &self, ) -> Result<TransactionResult<<BaseCtx as TransactionContext>::Pager>, Error>
Rollback the transaction in this session.
Sourcepub fn execute_operation(
&self,
operation: PlanOperation,
) -> Result<TransactionResult<<StagingCtx as TransactionContext>::Pager>, Error>
pub fn execute_operation( &self, operation: PlanOperation, ) -> Result<TransactionResult<<StagingCtx as TransactionContext>::Pager>, Error>
Execute an operation in this session’s transaction, or directly if no transaction is active.
Trait Implementations§
Source§impl<BaseCtx, StagingCtx> Drop for TransactionSession<BaseCtx, StagingCtx>where
BaseCtx: TransactionContext,
StagingCtx: TransactionContext,
impl<BaseCtx, StagingCtx> Drop for TransactionSession<BaseCtx, StagingCtx>where
BaseCtx: TransactionContext,
StagingCtx: TransactionContext,
Auto Trait Implementations§
impl<BaseCtx, StagingCtx> Freeze for TransactionSession<BaseCtx, StagingCtx>
impl<BaseCtx, StagingCtx> RefUnwindSafe for TransactionSession<BaseCtx, StagingCtx>where
BaseCtx: RefUnwindSafe,
impl<BaseCtx, StagingCtx> Send for TransactionSession<BaseCtx, StagingCtx>
impl<BaseCtx, StagingCtx> Sync for TransactionSession<BaseCtx, StagingCtx>
impl<BaseCtx, StagingCtx> Unpin for TransactionSession<BaseCtx, StagingCtx>
impl<BaseCtx, StagingCtx> UnwindSafe for TransactionSession<BaseCtx, StagingCtx>where
BaseCtx: RefUnwindSafe,
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> 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>
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>
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