29 #include "row0uins.ic"
64 static __attribute__((nonnull, warn_unused_result))
66 row_undo_ins_remove_clust_rec(
90 ut_ad(node->trx->dict_operation_lock_mode
92 ut_ad(node->table->id != DICT_INDEXES_ID);
96 success = btr_pcur_restore_position(
102 btr_cur = btr_pcur_get_btr_cur(&node->pcur);
104 ut_ad(rec_get_trx_id(btr_cur_get_rec(btr_cur), btr_cur->
index)
108 const rec_t*
rec = btr_cur_get_rec(btr_cur);
110 const ulint*
offsets = rec_get_offsets(
111 rec, index, NULL, ULINT_UNDEFINED, &heap);
113 rec, index, offsets,
true, node->trx->
id);
117 if (node->table->id == DICT_INDEXES_ID) {
119 ut_ad(node->trx->dict_operation_lock_mode == RW_X_LATCH);
130 success = btr_pcur_restore_position(
135 if (btr_cur_optimistic_delete(btr_cur, 0, &mtr)) {
146 &(node->pcur), &mtr);
158 if (err == DB_OUT_OF_FILE_SPACE
180 static __attribute__((nonnull, warn_unused_result))
182 row_undo_ins_remove_sec_low(
209 goto func_exit_no_pcur;
215 switch (search_result) {
228 btr_cur = btr_pcur_get_btr_cur(&pcur);
231 err = btr_cur_optimistic_delete(btr_cur, 0, &mtr)
232 ? DB_SUCCESS : DB_FAIL;
255 static __attribute__((nonnull, warn_unused_result))
257 row_undo_ins_remove_sec(
269 if (err == DB_SUCCESS) {
298 row_undo_ins_parse_undo_rec(
314 &dummy_extern, &undo_no, &table_id);
315 ut_ad(type == TRX_UNDO_INSERT_REC);
323 if (UNIV_UNLIKELY(node->
table == NULL)) {
329 clust_index = dict_table_get_first_index(node->
table);
331 if (clust_index != NULL) {
333 ptr, clust_index, &node->
ref, node->
heap);
341 fprintf(stderr,
" InnoDB: table ");
344 fprintf(stderr,
" has no indexes, "
345 "ignoring the table\n");
354 static __attribute__((nonnull, warn_unused_result))
356 row_undo_ins_remove_sec_rec(
366 while (index != NULL) {
369 if (index->
type & DICT_FTS) {
370 dict_table_next_uncorrupted_index(index);
379 node->row, node->ext, index, heap);
380 if (UNIV_UNLIKELY(!entry)) {
393 err = row_undo_ins_remove_sec(index, entry);
395 if (UNIV_UNLIKELY(err != DB_SUCCESS)) {
401 dict_table_next_uncorrupted_index(index);
430 row_undo_ins_parse_undo_rec(node, dict_locked);
432 if (node->
table == NULL) {
440 node->
index = dict_table_get_first_index(node->
table);
443 node->
index = dict_table_get_next_index(node->
index);
445 dict_table_skip_corrupt_index(node->
index);
447 err = row_undo_ins_remove_sec_rec(node);
449 if (err == DB_SUCCESS) {
453 if (node->
table->
id == DICT_INDEXES_ID) {
462 err = row_undo_ins_remove_clust_rec(node);
464 if (node->
table->
id == DICT_INDEXES_ID