29 #include "row0undo.ic"
136 ut_ad(trx && parent && heap);
172 ulint offsets_[REC_OFFS_NORMAL_SIZE];
173 ulint* offsets = offsets_;
174 rec_offs_init(offsets_);
178 clust_index = dict_table_get_first_index(node->
table);
183 rec = btr_pcur_get_rec(&(node->
pcur));
185 offsets = rec_get_offsets(rec, clust_index, offsets,
186 ULINT_UNDEFINED, &heap);
218 offsets, NULL, ext, node->
heap);
235 if (UNIV_LIKELY_NULL(heap)) {
256 ibool locked_data_dict;
313 if (locked_data_dict) {
315 row_mysql_freeze_data_dictionary(trx);
328 if (locked_data_dict) {
359 srv_activity_count++;
367 err = row_undo(node, thr);
371 if (err != DB_SUCCESS) {
374 fprintf(stderr,
"InnoDB: Fatal error %lu in rollback.\n",
377 if (err == DB_OUT_OF_FILE_SPACE) {
379 "InnoDB: Error 13 means out of tablespace.\n"
380 "InnoDB: Consider increasing"
381 " your tablespace.\n");
UNIV_INTERN void row_upd_replace(dtuple_t *row, row_ext_t **ext, const dict_index_t *index, const upd_t *update, mem_heap_t *heap)
UNIV_INLINE roll_ptr_t row_get_rec_roll_ptr(const rec_t *rec, dict_index_t *index, const ulint *offsets)
UNIV_INTERN ulint row_undo_mod(undo_node_t *node, que_thr_t *thr)
trx_undo_rec_t * undo_rec
UNIV_INTERN dtuple_t * row_build(ulint type, const dict_index_t *index, const rec_t *rec, const ulint *offsets, const dict_table_t *col_table, row_ext_t **ext, mem_heap_t *heap)
UNIV_INTERN trx_undo_rec_t * trx_undo_get_undo_rec_low(roll_ptr_t roll_ptr, mem_heap_t *heap)
UNIV_INTERN que_thr_t * row_undo_step(que_thr_t *thr)
#define DICT_TF_FORMAT_ZIP
#define mem_heap_free(heap)
UNIV_INTERN trx_undo_rec_t * trx_roll_pop_top_rec_of_trx(trx_t *trx, undo_no_t limit, roll_ptr_t *roll_ptr, mem_heap_t *heap)
UNIV_INLINE void btr_pcur_close(btr_pcur_t *cursor)
UNIV_INTERN void row_mysql_unfreeze_data_dictionary(trx_t *trx)
UNIV_INLINE void btr_pcur_init(btr_pcur_t *pcur)
UNIV_INLINE ulint dict_table_get_format(const dict_table_t *table)
UNIV_INTERN void btr_pcur_store_position(btr_pcur_t *cursor, mtr_t *mtr)
ulint dict_operation_lock_mode
UNIV_INLINE dtuple_t * dtuple_copy(const dtuple_t *tuple, mem_heap_t *heap)
UNIV_INLINE void * mem_heap_alloc(mem_heap_t *heap, ulint n)
#define mem_heap_create(N)
UNIV_INLINE void mem_heap_empty(mem_heap_t *heap)
UNIV_INLINE undo_no_t trx_undo_rec_get_undo_no(const trx_undo_rec_t *undo_rec)
UNIV_INLINE que_node_t * que_node_get_parent(que_node_t *node)
UNIV_INLINE ulint que_node_get_type(que_node_t *node)
UNIV_INLINE trx_t * thr_get_trx(que_thr_t *thr)
UNIV_INLINE void mtr_start(mtr_t *mtr) __attribute__((nonnull))
UNIV_INTERN ibool row_search_on_row_ref(btr_pcur_t *pcur, ulint mode, const dict_table_t *table, const dtuple_t *ref, mtr_t *mtr)
UNIV_INTERN undo_node_t * row_undo_node_create(trx_t *trx, que_thr_t *parent, mem_heap_t *heap)
UNIV_INTERN ibool row_undo_search_clust_to_pcur(undo_node_t *node)
UNIV_INTERN ulint row_undo_ins(undo_node_t *node)
UNIV_INLINE void btr_pcur_commit_specify_mtr(btr_pcur_t *pcur, mtr_t *mtr)
UNIV_INLINE ibool trx_undo_roll_ptr_is_insert(roll_ptr_t roll_ptr)