/******************************************************
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. This can only be
called twice after calling trx_reset_new_rec_lock_info(), since we only have
space to store 2 indexes! */
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;
	}

	ut_a(trx->new_rec_locks[1] == NULL);

	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);
}