1
/*****************************************************************************
3
Copyright (C) 1997, 2009, Innobase Oy. All Rights Reserved.
5
This program is free software; you can redistribute it and/or modify it under
6
the terms of the GNU General Public License as published by the Free Software
7
Foundation; version 2 of the License.
9
This program is distributed in the hope that it will be useful, but WITHOUT
10
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
13
You should have received a copy of the GNU General Public License along with
14
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
15
St, Fifth Floor, Boston, MA 02110-1301 USA
17
*****************************************************************************/
19
/**************************************************//**
20
@file include/read0read.h
1
/******************************************************
23
6
Created 2/16/1997 Heikki Tuuri
24
7
*******************************************************/
34
17
#include "trx0trx.h"
35
18
#include "read0types.h"
37
/*********************************************************************//**
20
/*************************************************************************
38
21
Opens a read view where exactly the transactions serialized before this
39
point in time are seen in the view.
40
@return own: read view struct */
22
point in time are seen in the view. */
43
25
read_view_open_now(
44
26
/*===============*/
45
trx_id_t cr_trx_id, /*!< in: trx_id of creating
46
transaction, or 0 used in purge */
47
mem_heap_t* heap); /*!< in: memory heap from which
27
/* out, own: read view struct */
28
dulint cr_trx_id, /* in: trx_id of creating
29
transaction, or (0, 0) used in
31
mem_heap_t* heap); /* in: memory heap from which
49
/*********************************************************************//**
33
/*************************************************************************
50
34
Makes a copy of the oldest existing read view, or opens a new. The view
51
must be closed with ..._close.
52
@return own: read view struct */
35
must be closed with ..._close. */
55
38
read_view_oldest_copy_or_open_new(
56
39
/*==============================*/
57
trx_id_t cr_trx_id, /*!< in: trx_id of creating
58
transaction, or 0 used in purge */
59
mem_heap_t* heap); /*!< in: memory heap from which
40
/* out, own: read view struct */
41
dulint cr_trx_id, /* in: trx_id of creating
42
transaction, or (0, 0) used in
44
mem_heap_t* heap); /* in: memory heap from which
61
/*********************************************************************//**
46
/*************************************************************************
62
47
Closes a read view. */
67
read_view_t* view); /*!< in: read view */
68
/*********************************************************************//**
52
read_view_t* view); /* in: read view */
53
/*************************************************************************
69
54
Closes a consistent read view for MySQL. This function is called at an SQL
70
55
statement end if the trx isolation level is <= TRX_ISO_READ_COMMITTED. */
73
58
read_view_close_for_mysql(
74
59
/*======================*/
75
trx_t* trx); /*!< in: trx which has a read view */
76
/*********************************************************************//**
77
Checks if a read view sees the specified transaction.
78
@return TRUE if sees */
60
trx_t* trx); /* in: trx which has a read view */
61
/*************************************************************************
62
Checks if a read view sees the specified transaction. */
81
65
read_view_sees_trx_id(
82
66
/*==================*/
83
const read_view_t* view, /*!< in: read view */
84
trx_id_t trx_id);/*!< in: trx id */
85
/*********************************************************************//**
67
/* out: TRUE if sees */
68
read_view_t* view, /* in: read view */
69
dulint trx_id);/* in: trx id */
70
/*************************************************************************
86
71
Prints a read view to stderr. */
91
const read_view_t* view); /*!< in: read view */
92
/*********************************************************************//**
76
read_view_t* view); /* in: read view */
77
/*************************************************************************
93
78
Create a consistent cursor view for mysql to be used in cursors. In this
94
79
consistent read view modifications done by the creating transaction or future
95
80
transactions are not visible. */
98
83
read_cursor_view_create_for_mysql(
99
84
/*==============================*/
100
trx_t* cr_trx);/*!< in: trx where cursor view is created */
101
/*********************************************************************//**
85
trx_t* cr_trx);/* in: trx where cursor view is created */
86
/*************************************************************************
102
87
Close a given consistent cursor view for mysql and restore global read view
103
88
back to a transaction read view. */
106
91
read_cursor_view_close_for_mysql(
107
92
/*=============================*/
108
trx_t* trx, /*!< in: trx */
109
cursor_view_t* curview); /*!< in: cursor view to be closed */
110
/*********************************************************************//**
93
trx_t* trx, /* in: trx */
94
cursor_view_t* curview); /* in: cursor view to be closed */
95
/*************************************************************************
111
96
This function sets a given consistent cursor view to a transaction
112
97
read view if given consistent cursor view is not NULL. Otherwise, function
113
98
restores a global read view to a transaction read view. */
116
101
read_cursor_set_for_mysql(
117
102
/*======================*/
118
trx_t* trx, /*!< in: transaction where cursor is set */
119
cursor_view_t* curview);/*!< in: consistent cursor view to be set */
103
trx_t* trx, /* in: transaction where cursor is set */
104
cursor_view_t* curview);/* in: consistent cursor view to be set */
121
/** Read view lists the trx ids of those transactions for which a consistent
106
/* Read view lists the trx ids of those transactions for which a consistent
122
107
read should not see the modifications to the database. */
124
109
struct read_view_struct{
125
ulint type; /*!< VIEW_NORMAL, VIEW_HIGH_GRANULARITY */
126
undo_no_t undo_no;/*!< 0 or if type is
127
VIEW_HIGH_GRANULARITY
110
ulint type; /* VIEW_NORMAL, VIEW_HIGH_GRANULARITY */
111
dulint undo_no; /* (0, 0) or if type is VIEW_HIGH_GRANULARITY
128
112
transaction undo_no when this high-granularity
129
113
consistent read view was created */
130
trx_id_t low_limit_no;
131
/*!< The view does not need to see the undo
114
dulint low_limit_no; /* The view does not need to see the undo
132
115
logs for transactions whose transaction number
133
116
is strictly smaller (<) than this value: they
134
117
can be removed in purge if not needed by other
136
trx_id_t low_limit_id;
137
/*!< The read should not see any transaction
138
with trx id >= this value. In other words,
139
this is the "high water mark". */
140
trx_id_t up_limit_id;
141
/*!< The read should see all trx ids which
142
are strictly smaller (<) than this value.
144
this is the "low water mark". */
146
/*!< Number of cells in the trx_ids array */
147
trx_id_t* trx_ids;/*!< Additional trx ids which the read should
119
dulint low_limit_id; /* The read should not see any transaction
120
with trx id >= this value */
121
dulint up_limit_id; /* The read should see all trx ids which
122
are strictly smaller (<) than this value */
123
ulint n_trx_ids; /* Number of cells in the trx_ids array */
124
dulint* trx_ids; /* Additional trx ids which the read should
148
125
not see: typically, these are the active
149
126
transactions at the time when the read is
150
127
serialized, except the reading transaction
151
128
itself; the trx ids in this array are in a
152
descending order. These trx_ids should be
153
between the "low" and "high" water marks,
154
that is, up_limit_id and low_limit_id. */
155
trx_id_t creator_trx_id;
156
/*!< trx id of creating transaction, or
130
dulint creator_trx_id; /* trx id of creating transaction, or
131
(0, 0) used in purge */
158
132
UT_LIST_NODE_T(read_view_t) view_list;
159
/*!< List of read views in trx_sys */
133
/* List of read views in trx_sys */
162
/** Read view types @{ */
163
#define VIEW_NORMAL 1 /*!< Normal consistent read view
136
/* Read view types */
137
#define VIEW_NORMAL 1 /* Normal consistent read view
164
138
where transaction does not see changes
165
139
made by active transactions except
166
140
creating transaction. */
167
#define VIEW_HIGH_GRANULARITY 2 /*!< High-granularity read view where
141
#define VIEW_HIGH_GRANULARITY 2 /* High-granularity read view where
168
142
transaction does not see changes
169
143
made by active transactions and own
170
144
changes after a point in time when this
171
145
read view was created. */
174
/** Implement InnoDB framework to support consistent read views in
147
/* Implement InnoDB framework to support consistent read views in
175
148
cursors. This struct holds both heap where consistent read view
176
149
is allocated and pointer to a read view. */
178
151
struct cursor_view_struct{
179
152
mem_heap_t* heap;
180
/*!< Memory heap for the cursor view */
153
/* Memory heap for the cursor view */
181
154
read_view_t* read_view;
182
/*!< Consistent read view of the cursor*/
155
/* Consistent read view of the cursor*/
156
ulint n_mysql_tables_in_use;
157
/* number of Innobase tables used in the
158
processing of this cursor */
185
161
#ifndef UNIV_NONINL