read0read.h 5.55 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
/******************************************************
Cursor read

(c) 1997 Innobase Oy

Created 2/16/1997 Heikki Tuuri
*******************************************************/

#ifndef read0read_h
#define read0read_h

#include "univ.i"


#include "ut0byte.h"
#include "ut0lst.h"
#include "trx0trx.h"
#include "read0types.h"

/*************************************************************************
Opens a read view where exactly the transactions serialized before this
point in time are seen in the view. */

read_view_t*
read_view_open_now(
/*===============*/
27 28 29 30 31 32
					/* out, own: read view struct */
	dulint		cr_trx_id,	/* in: trx_id of creating
					transaction, or (0, 0) used in
					purge */
	mem_heap_t*	heap);		/* in: memory heap from which
					allocated */
33 34 35 36 37 38 39
/*************************************************************************
Makes a copy of the oldest existing read view, or opens a new. The view
must be closed with ..._close. */

read_view_t*
read_view_oldest_copy_or_open_new(
/*==============================*/
40 41 42 43 44 45
					/* out, own: read view struct */
	dulint		cr_trx_id,	/* in: trx_id of creating
					transaction, or (0, 0) used in
					purge */
	mem_heap_t*	heap);		/* in: memory heap from which
					allocated */
46 47 48 49 50 51 52 53
/*************************************************************************
Closes a read view. */

void
read_view_close(
/*============*/
	read_view_t*	view);	/* in: read view */
/*************************************************************************
unknown's avatar
unknown committed
54 55 56 57 58 59 60 61
Closes a consistent read view for MySQL. This function is called at an SQL
statement end if the trx isolation level is <= TRX_ISO_READ_COMMITTED. */

void
read_view_close_for_mysql(
/*======================*/
	trx_t*	trx);	/* in: trx which has a read view */
/*************************************************************************
62 63 64 65 66 67 68
Checks if a read view sees the specified transaction. */
UNIV_INLINE
ibool
read_view_sees_trx_id(
/*==================*/
				/* out: TRUE if sees */
	read_view_t*	view,	/* in: read view */
69
	dulint		trx_id);/* in: trx id */
unknown's avatar
Merge  
unknown committed
70 71 72 73 74 75 76
/*************************************************************************
Prints a read view to stderr. */

void
read_view_print(
/*============*/
	read_view_t*	view);	/* in: read view */
77
/*************************************************************************
78
Create a consistent cursor view for mysql to be used in cursors. In this
79 80 81 82 83 84 85 86
consistent read view modifications done by the creating transaction or future
transactions are not visible. */

cursor_view_t*
read_cursor_view_create_for_mysql(
/*==============================*/
	trx_t*		cr_trx);/* in: trx where cursor view is created */
/*************************************************************************
unknown's avatar
unknown committed
87 88
Close a given consistent cursor view for mysql and restore global read view
back to a transaction read view. */
89 90 91 92 93 94 95 96

void
read_cursor_view_close_for_mysql(
/*=============================*/
	trx_t*		trx,		/* in: trx */
	cursor_view_t*	curview);	/* in: cursor view to be closed */
/*************************************************************************
This function sets a given consistent cursor view to a transaction
unknown's avatar
unknown committed
97
read view if given consistent cursor view is not NULL. Otherwise, function
98 99
restores a global read view to a transaction read view. */

100
void
101 102 103 104
read_cursor_set_for_mysql(
/*======================*/
	trx_t*		trx,	/* in: transaction where cursor is set */
	cursor_view_t*	curview);/* in: consistent cursor view to be set */
105 106 107 108 109

/* Read view lists the trx ids of those transactions for which a consistent
read should not see the modifications to the database. */

struct read_view_struct{
110 111 112 113
	ulint	type;		/* VIEW_NORMAL, VIEW_HIGH_GRANULARITY */
	dulint	undo_no;	/* (0, 0) or if type is VIEW_HIGH_GRANULARITY
				transaction undo_no when this high-granularity
				consistent read view was created */
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
	dulint	low_limit_no;	/* The view does not need to see the undo
				logs for transactions whose transaction number
				is strictly smaller (<) than this value: they
				can be removed in purge if not needed by other
				views */
	dulint	low_limit_id;	/* The read should not see any transaction
				with trx id >= this value */
	dulint	up_limit_id;	/* The read should see all trx ids which
				are strictly smaller (<) than this value */
	ulint	n_trx_ids;	/* Number of cells in the trx_ids array */
	dulint*	trx_ids;	/* Additional trx ids which the read should
				not see: typically, these are the active
				transactions at the time when the read is
				serialized, except the reading transaction
				itself; the trx ids in this array are in a
				descending order */
130 131
	dulint	creator_trx_id;	/* trx id of creating transaction, or
				(0, 0) used in purge */
132 133 134 135
	UT_LIST_NODE_T(read_view_t) view_list;
				/* List of read views in trx_sys */
};

136 137 138 139 140 141 142 143 144 145 146
/* Read view types */
#define VIEW_NORMAL		1	/* Normal consistent read view
					where transaction does not see changes
					made by active transactions except
					creating transaction. */
#define VIEW_HIGH_GRANULARITY	2	/* High-granularity read view where
					transaction does not see changes
					made by active transactions and own
					changes after a point in time when this
					read view was created. */

147 148 149 150 151 152 153
/* Implement InnoDB framework to support consistent read views in
cursors. This struct holds both heap where consistent read view
is allocated and pointer to a read view. */

struct cursor_view_struct{
	mem_heap_t*	heap;
				/* Memory heap for the cursor view */
154
	read_view_t*	read_view;
155
				/* Consistent read view of the cursor*/
156
	ulint		n_mysql_tables_in_use;
157 158
				/* number of Innobase tables used in the
				processing of this cursor */
159 160
};

161 162 163 164
#ifndef UNIV_NONINL
#include "read0read.ic"
#endif

165
#endif