1
/******************************************************
6
Created 3/26/1996 Heikki Tuuri
7
*******************************************************/
9
/*****************************************************************
10
Starts the transaction if it is not yet started. */
13
trx_start_if_not_started(
14
/*=====================*/
15
trx_t* trx) /* in: transaction */
17
ut_ad(trx->conc_state != TRX_COMMITTED_IN_MEMORY);
19
if (trx->conc_state == TRX_NOT_STARTED) {
21
trx_start(trx, ULINT_UNDEFINED);
25
/*****************************************************************
26
Starts the transaction if it is not yet started. Assumes we have reserved
30
trx_start_if_not_started_low(
31
/*=========================*/
32
trx_t* trx) /* in: transaction */
34
ut_ad(trx->conc_state != TRX_COMMITTED_IN_MEMORY);
36
if (trx->conc_state == TRX_NOT_STARTED) {
38
trx_start_low(trx, ULINT_UNDEFINED);
42
/*****************************************************************
43
Resets the new record lock info in a transaction struct. */
46
trx_reset_new_rec_lock_info(
47
/*========================*/
48
trx_t* trx) /* in: transaction struct */
50
trx->new_rec_locks[0] = NULL;
51
trx->new_rec_locks[1] = NULL;
54
/*****************************************************************
55
Registers that we have set a new record lock on an index. We only have space
56
to store 2 indexes! If this is called to store more than 2 indexes after
57
trx_reset_new_rec_lock_info(), then this function does nothing. */
60
trx_register_new_rec_lock(
61
/*======================*/
62
trx_t* trx, /* in: transaction struct */
63
dict_index_t* index) /* in: trx sets a new record lock on this
66
if (trx->new_rec_locks[0] == NULL) {
67
trx->new_rec_locks[0] = index;
72
if (trx->new_rec_locks[0] == index) {
77
if (trx->new_rec_locks[1] != NULL) {
82
trx->new_rec_locks[1] = index;
85
/*****************************************************************
86
Checks if trx has set a new record lock on an index. */
89
trx_new_rec_locks_contain(
90
/*======================*/
91
/* out: TRUE if trx has set a new record lock
93
trx_t* trx, /* in: transaction struct */
94
dict_index_t* index) /* in: index */
96
return(trx->new_rec_locks[0] == index
97
|| trx->new_rec_locks[1] == index);
100
/********************************************************************
101
Retrieves the error_info field from a trx. */
106
/* out: the error info */
107
const trx_t* trx) /* in: trx object */
109
return(trx->error_info);
112
/***********************************************************************
113
Retrieves transacion's id, represented as unsigned long long. */
118
/* out: transaction's id */
119
const trx_t* trx) /* in: transaction */
121
return((ullint)ut_conv_dulint_to_longlong(trx->id));
124
/***********************************************************************
125
Retrieves transaction's que state in a human readable string. The string
126
should not be free()'d or modified. */
129
trx_get_que_state_str(
130
/*==================*/
131
/* out: string in the data segment */
132
const trx_t* trx) /* in: transaction */
134
/* be sure to adjust TRX_QUE_STATE_STR_MAX_LEN if you change this */
135
switch (trx->que_state) {
136
case TRX_QUE_RUNNING:
138
case TRX_QUE_LOCK_WAIT:
140
case TRX_QUE_ROLLING_BACK:
141
return("ROLLING BACK");
142
case TRX_QUE_COMMITTING:
143
return("COMMITTING");
149
/**************************************************************************
150
Determine if a transaction is a dictionary operation. */
153
trx_get_dict_operation(
154
/*===================*/
155
/* out: dictionary operation mode */
156
const trx_t* trx) /* in: transaction */
158
enum trx_dict_op op = (enum trx_dict_op) trx->dict_operation;
162
case TRX_DICT_OP_NONE:
163
case TRX_DICT_OP_TABLE:
164
case TRX_DICT_OP_INDEX:
168
#endif /* UNIV_DEBUG */
169
return((enum trx_dict_op) UNIV_EXPECT(op, TRX_DICT_OP_NONE));
171
/**************************************************************************
172
Flag a transaction a dictionary operation. */
175
trx_set_dict_operation(
176
/*===================*/
177
trx_t* trx, /* in/out: transaction */
178
enum trx_dict_op op) /* in: operation, not
182
enum trx_dict_op old_op = trx_get_dict_operation(trx);
185
case TRX_DICT_OP_NONE:
188
case TRX_DICT_OP_TABLE:
190
case TRX_DICT_OP_NONE:
191
case TRX_DICT_OP_INDEX:
192
case TRX_DICT_OP_TABLE:
197
case TRX_DICT_OP_INDEX:
198
ut_ad(old_op == TRX_DICT_OP_NONE);
202
#endif /* UNIV_DEBUG */
204
trx->dict_operation = op;