MySQL 8.0.40
Source Code Documentation
row0undo.h
Go to the documentation of this file.
1/*****************************************************************************
2
3Copyright (c) 1997, 2024, Oracle and/or its affiliates.
4
5This program is free software; you can redistribute it and/or modify it under
6the terms of the GNU General Public License, version 2.0, as published by the
7Free Software Foundation.
8
9This program is designed to work with certain software (including
10but not limited to OpenSSL) that is licensed under separate terms,
11as designated in a particular file or component or in included license
12documentation. The authors of MySQL hereby grant you an additional
13permission to link the program and your derivative works with the
14separately licensed software that they have either included with
15the program or referenced in the documentation.
16
17This program is distributed in the hope that it will be useful, but WITHOUT
18ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
19FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0,
20for more details.
21
22You should have received a copy of the GNU General Public License along with
23this program; if not, write to the Free Software Foundation, Inc.,
2451 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25
26*****************************************************************************/
27
28/** @file include/row0undo.h
29 Row undo
30
31 Created 1/8/1997 Heikki Tuuri
32 *******************************************************/
33
34#ifndef row0undo_h
35#define row0undo_h
36
37#include "btr0pcur.h"
38#include "btr0types.h"
39#include "dict0types.h"
40#include "mtr0mtr.h"
41#include "que0types.h"
42#include "row0types.h"
43#include "trx0sys.h"
44#include "trx0types.h"
45#include "univ.i"
46
47/** Converts an implicit lock on the record to explicit in case of partial
48 rollback.
49@param[in] cursor cursor to record
50@param[in] node undo node */
52
53/** Creates a row undo node to a query graph.
54@param[in] trx transaction
55@param[in] parent parent node, i.e., a thr node
56@param[in] heap memory heap where created
57@param[in] partial_rollback true if partial rollback
58@return undo node */
60 mem_heap_t *heap, bool partial_rollback);
61
62/** Looks for the clustered index record when node has the row reference.
63 The pcur in node is used in the search. If found, stores the row to node,
64 and stores the position of pcur, and detaches it. The pcur must be closed
65 by the caller in any case.
66 @return true if found; NOTE the node->pcur must be closed by the
67 caller, regardless of the return value */
68[[nodiscard]] bool row_undo_search_clust_to_pcur(
69 undo_node_t *node); /*!< in/out: row undo node */
70/** Undoes a row operation in a table. This is a high-level function used
71 in SQL execution graphs.
72 @return query thread to run next or NULL */
73que_thr_t *row_undo_step(que_thr_t *thr); /*!< in: query thread */
74
75/* A single query thread will try to perform the undo for all successive
76versions of a clustered index record, if the transaction has modified it
77several times during the execution which is rolled back. It may happen
78that the task is transferred to another query thread, if the other thread
79is assigned to handle an undo log record in the chain of different versions
80of the record, and the other thread happens to get the x-latch to the
81clustered index record at the right time.
82 If a query thread notices that the clustered index record it is looking
83for is missing, or the roll ptr field in the record does not point to the
84undo log record the thread was assigned to handle, then it gives up the undo
85task for that undo log record, and fetches the next. This situation can occur
86just in the case where the transaction modified the same record several times
87and another thread is currently doing the undo for successive versions of
88that index record. */
89
90/** Execution state of an undo node */
92 UNDO_NODE_FETCH_NEXT = 1, /*!< we should fetch the next
93 undo log record */
94 UNDO_NODE_INSERT, /*!< undo a fresh insert of a
95 row to a table */
96 UNDO_NODE_MODIFY /*!< undo a modify operation
97 (DELETE or UPDATE) on a row
98 of a table */
99};
100
101/** Undo node structure */
103 que_common_t common; /*!< node type: QUE_NODE_UNDO */
104 enum undo_exec state; /*!< node execution state */
105 trx_t *trx; /*!< trx for which undo is done */
106 roll_ptr_t roll_ptr; /*!< roll pointer to undo log record */
107 trx_undo_rec_t *undo_rec; /*!< undo log record */
108 undo_no_t undo_no; /*!< undo number of the record */
109 ulint rec_type; /*!< undo log record type: TRX_UNDO_INSERT_REC,
110 ... */
111 trx_id_t new_trx_id; /*!< trx id to restore to clustered index
112 record */
113 btr_pcur_t pcur; /*!< persistent cursor used in searching the
114 clustered index record */
115 dict_table_t *table; /*!< table where undo is done */
116 ulint cmpl_info; /*!< compiler analysis of an update */
117 upd_t *update; /*!< update vector for a clustered index
118 record */
119 dtuple_t *ref; /*!< row reference to the next row to handle */
120 dtuple_t *row; /*!< a copy (also fields copied to heap) of the
121 row to handle */
122 row_ext_t *ext; /*!< NULL, or prefixes of the externally
123 stored columns of the row */
124 dtuple_t *undo_row; /*!< NULL, or the row after undo */
125 row_ext_t *undo_ext; /*!< NULL, or prefixes of the externally
126 stored columns of undo_row */
127 dict_index_t *index; /*!< the next index whose record should be
128 handled */
129 mem_heap_t *heap; /*!< memory heap used as auxiliary storage for
130 row; this must be emptied after undo is tried
131 on a row */
132 bool partial; /*!< true if partial rollback */
133};
134
135#endif
The index tree persistent cursor.
The index tree general types.
Data dictionary global types.
Mini-transaction buffer.
Query graph global types.
Row operation global types.
void row_convert_impl_to_expl_if_needed(btr_cur_t *cursor, undo_node_t *node)
Converts an implicit lock on the record to explicit in case of partial rollback.
Definition: row0undo.cc:315
undo_exec
Execution state of an undo node.
Definition: row0undo.h:91
@ UNDO_NODE_FETCH_NEXT
we should fetch the next undo log record
Definition: row0undo.h:92
@ UNDO_NODE_INSERT
undo a fresh insert of a row to a table
Definition: row0undo.h:94
@ UNDO_NODE_MODIFY
undo a modify operation (DELETE or UPDATE) on a row of a table
Definition: row0undo.h:96
que_thr_t * row_undo_step(que_thr_t *thr)
Undoes a row operation in a table.
Definition: row0undo.cc:347
bool row_undo_search_clust_to_pcur(undo_node_t *node)
Looks for the clustered index record when node has the row reference.
Definition: row0undo.cc:159
undo_node_t * row_undo_node_create(trx_t *trx, que_thr_t *parent, mem_heap_t *heap, bool partial_rollback)
Creates a row undo node to a query graph.
Definition: row0undo.cc:129
The tree cursor: the definition appears here only for the compiler to know struct size!
Definition: btr0cur.h:668
Definition: btr0pcur.h:99
Data structure for an index.
Definition: dict0mem.h:1046
Data structure for a database table.
Definition: dict0mem.h:1909
Structure for an SQL data tuple of fields (logical record)
Definition: data0data.h:694
The info structure stored at the beginning of a heap block.
Definition: mem0mem.h:302
Definition: que0types.h:51
Definition: que0que.h:242
Prefixes of externally stored columns.
Definition: row0ext.h:95
Definition: trx0trx.h:675
Undo node structure.
Definition: row0undo.h:102
ulint rec_type
undo log record type: TRX_UNDO_INSERT_REC, ...
Definition: row0undo.h:109
undo_no_t undo_no
undo number of the record
Definition: row0undo.h:108
dtuple_t * undo_row
NULL, or the row after undo.
Definition: row0undo.h:124
upd_t * update
update vector for a clustered index record
Definition: row0undo.h:117
row_ext_t * ext
NULL, or prefixes of the externally stored columns of the row.
Definition: row0undo.h:122
btr_pcur_t pcur
persistent cursor used in searching the clustered index record
Definition: row0undo.h:113
trx_id_t new_trx_id
trx id to restore to clustered index record
Definition: row0undo.h:111
enum undo_exec state
node execution state
Definition: row0undo.h:104
mem_heap_t * heap
memory heap used as auxiliary storage for row; this must be emptied after undo is tried on a row
Definition: row0undo.h:129
dtuple_t * ref
row reference to the next row to handle
Definition: row0undo.h:119
dict_index_t * index
the next index whose record should be handled
Definition: row0undo.h:127
trx_t * trx
trx for which undo is done
Definition: row0undo.h:105
roll_ptr_t roll_ptr
roll pointer to undo log record
Definition: row0undo.h:106
dtuple_t * row
a copy (also fields copied to heap) of the row to handle
Definition: row0undo.h:120
dict_table_t * table
table where undo is done
Definition: row0undo.h:115
trx_undo_rec_t * undo_rec
undo log record
Definition: row0undo.h:107
bool partial
true if partial rollback
Definition: row0undo.h:132
que_common_t common
node type: QUE_NODE_UNDO
Definition: row0undo.h:103
ulint cmpl_info
compiler analysis of an update
Definition: row0undo.h:116
row_ext_t * undo_ext
NULL, or prefixes of the externally stored columns of undo_row.
Definition: row0undo.h:125
Definition: row0upd.h:565
Transaction system.
Transaction system global type definitions.
byte trx_undo_rec_t
Undo log record.
Definition: trx0types.h:167
ib_id_t undo_no_t
Undo number.
Definition: trx0types.h:142
ib_id_t trx_id_t
Transaction identifier (DB_TRX_ID, DATA_TRX_ID)
Definition: trx0types.h:138
ib_id_t roll_ptr_t
Rollback pointer (DB_ROLL_PTR, DATA_ROLL_PTR)
Definition: trx0types.h:140
Version control for database, common definitions, and include files.
unsigned long int ulint
Definition: univ.i:406