/****************************************************** The transaction (c) 1996 Innobase Oy Created 3/26/1996 Heikki Tuuri *******************************************************/ /***************************************************************** Starts the transaction if it is not yet started. */ UNIV_INLINE void trx_start_if_not_started( /*=====================*/ trx_t* trx) /* in: transaction */ { ut_ad(trx->conc_state != TRX_COMMITTED_IN_MEMORY); if (trx->conc_state == TRX_NOT_STARTED) { trx_start(trx, ULINT_UNDEFINED); } } /***************************************************************** Starts the transaction if it is not yet started. Assumes we have reserved the kernel mutex! */ UNIV_INLINE void trx_start_if_not_started_low( /*=========================*/ trx_t* trx) /* in: transaction */ { ut_ad(trx->conc_state != TRX_COMMITTED_IN_MEMORY); if (trx->conc_state == TRX_NOT_STARTED) { trx_start_low(trx, ULINT_UNDEFINED); } } /***************************************************************** Resets the new record lock info in a transaction struct. */ UNIV_INLINE void trx_reset_new_rec_lock_info( /*========================*/ trx_t* trx) /* in: transaction struct */ { trx->new_rec_locks[0] = NULL; trx->new_rec_locks[1] = NULL; } /***************************************************************** Registers that we have set a new record lock on an index. We only have space to store 2 indexes! If this is called to store more than 2 indexes after trx_reset_new_rec_lock_info(), then this function does nothing. */ UNIV_INLINE void trx_register_new_rec_lock( /*======================*/ trx_t* trx, /* in: transaction struct */ dict_index_t* index) /* in: trx sets a new record lock on this index */ { if (trx->new_rec_locks[0] == NULL) { trx->new_rec_locks[0] = index; return; } if (trx->new_rec_locks[0] == index) { return; } if (trx->new_rec_locks[1] != NULL) { return; } trx->new_rec_locks[1] = index; } /***************************************************************** Checks if trx has set a new record lock on an index. */ UNIV_INLINE ibool trx_new_rec_locks_contain( /*======================*/ /* out: TRUE if trx has set a new record lock on index */ trx_t* trx, /* in: transaction struct */ dict_index_t* index) /* in: index */ { return(trx->new_rec_locks[0] == index || trx->new_rec_locks[1] == index); } /******************************************************************** Retrieves the error_info field from a trx. */ UNIV_INLINE const dict_index_t* trx_get_error_info( /*===============*/ /* out: the error info */ const trx_t* trx) /* in: trx object */ { return(trx->error_info); } /*********************************************************************** Retrieves transacion's id, represented as unsigned long long. */ UNIV_INLINE ullint trx_get_id( /*=======*/ /* out: transaction's id */ const trx_t* trx) /* in: transaction */ { return((ullint)ut_conv_dulint_to_longlong(trx->id)); } /*********************************************************************** Retrieves transaction's que state in a human readable string. The string should not be free()'d or modified. */ UNIV_INLINE const char* trx_get_que_state_str( /*==================*/ /* out: string in the data segment */ const trx_t* trx) /* in: transaction */ { /* be sure to adjust TRX_QUE_STATE_STR_MAX_LEN if you change this */ switch (trx->que_state) { case TRX_QUE_RUNNING: return("RUNNING"); case TRX_QUE_LOCK_WAIT: return("LOCK WAIT"); case TRX_QUE_ROLLING_BACK: return("ROLLING BACK"); case TRX_QUE_COMMITTING: return("COMMITTING"); default: return("UNKNOWN"); } }