39
38
#include "row0mysql.h"
40
39
#include "lock0types.h"
42
/** Index field definition */
41
/* This structure holds index field definitions */
43
43
struct merge_index_field_struct {
44
ulint prefix_len; /*!< column prefix length, or 0
45
if indexing the whole column */
46
const char* field_name; /*!< field name */
44
ulint prefix_len; /* Prefix len */
45
const char* field_name; /* Field name */
49
/** Index field definition */
50
48
typedef struct merge_index_field_struct merge_index_field_t;
52
/** Definition of an index being created */
50
/* This structure holds index definitions */
53
52
struct merge_index_def_struct {
54
const char* name; /*!< index name */
55
ulint ind_type; /*!< 0, DICT_UNIQUE,
53
const char* name; /* Index name */
54
ulint ind_type; /* 0, DICT_UNIQUE,
56
55
or DICT_CLUSTERED */
57
ulint n_fields; /*!< number of fields
59
merge_index_field_t* fields; /*!< field definitions */
56
ulint n_fields; /* Number of fields in index */
57
merge_index_field_t* fields; /* Field definitions */
62
/** Definition of an index being created */
63
60
typedef struct merge_index_def_struct merge_index_def_t;
65
/*********************************************************************//**
66
Sets an exclusive lock on a table, for the duration of creating indexes.
67
@return error code or DB_SUCCESS */
62
/*************************************************************************
63
Sets an exclusive lock on a table, for the duration of creating indexes. */
70
66
row_merge_lock_table(
71
67
/*=================*/
72
trx_t* trx, /*!< in/out: transaction */
73
dict_table_t* table, /*!< in: table to lock */
74
enum lock_mode mode); /*!< in: LOCK_X or LOCK_S */
75
/*********************************************************************//**
68
/* out: error code or DB_SUCCESS */
69
trx_t* trx, /* in/out: transaction */
70
dict_table_t* table, /* in: table to lock */
71
enum lock_mode mode); /* in: LOCK_X or LOCK_S */
72
/*************************************************************************
76
73
Drop an index from the InnoDB system tables. The data dictionary must
77
74
have been locked exclusively by the caller, because the transaction
78
75
will not be committed. */
93
90
row_merge_drop_indexes(
94
91
/*===================*/
95
trx_t* trx, /*!< in: transaction */
96
dict_table_t* table, /*!< in: table containing the indexes */
97
dict_index_t** index, /*!< in: indexes to drop */
98
ulint num_created); /*!< in: number of elements in index[] */
99
/*********************************************************************//**
92
trx_t* trx, /* in: transaction */
93
dict_table_t* table, /* in: table containing the indexes */
94
dict_index_t** index, /* in: indexes to drop */
95
ulint num_created); /* in: number of elements in index[] */
96
/*************************************************************************
100
97
Drop all partially created indexes during crash recovery. */
103
100
row_merge_drop_temp_indexes(void);
104
101
/*=============================*/
105
/*********************************************************************//**
102
/*************************************************************************
106
103
Rename the tables in the data dictionary. The data dictionary must
107
104
have been locked exclusively by the caller, because the transaction
108
will not be committed.
109
@return error code or DB_SUCCESS */
105
will not be committed. */
112
108
row_merge_rename_tables(
113
109
/*====================*/
114
dict_table_t* old_table, /*!< in/out: old table, renamed to
110
/* out: error code or DB_SUCCESS */
111
dict_table_t* old_table, /* in/out: old table, renamed to
116
dict_table_t* new_table, /*!< in/out: new table, renamed to
113
dict_table_t* new_table, /* in/out: new table, renamed to
117
114
old_table->name */
118
const char* tmp_name, /*!< in: new name for old_table */
119
trx_t* trx); /*!< in: transaction handle */
115
const char* tmp_name, /* in: new name for old_table */
116
trx_t* trx); /* in: transaction handle */
121
/*********************************************************************//**
118
/*************************************************************************
122
119
Create a temporary table for creating a primary key, using the definition
123
of an existing table.
124
@return table, or NULL on error */
120
of an existing table. */
127
123
row_merge_create_temporary_table(
128
124
/*=============================*/
129
const char* table_name, /*!< in: new table name */
130
const merge_index_def_t*index_def, /*!< in: the index definition
127
const char* table_name, /* in: new table name */
128
const merge_index_def_t*index_def, /* in: the index definition
131
129
of the primary key */
132
const dict_table_t* table, /*!< in: old table definition */
133
trx_t* trx); /*!< in/out: transaction
130
const dict_table_t* table, /* in: old table definition */
131
trx_t* trx); /* in/out: transaction
134
132
(sets error_state) */
135
/*********************************************************************//**
133
/*************************************************************************
136
134
Rename the temporary indexes in the dictionary to permanent ones. The
137
135
data dictionary must have been locked exclusively by the caller,
138
because the transaction will not be committed.
139
@return DB_SUCCESS if all OK */
136
because the transaction will not be committed. */
142
139
row_merge_rename_indexes(
143
140
/*=====================*/
144
trx_t* trx, /*!< in/out: transaction */
145
dict_table_t* table); /*!< in/out: table with new indexes */
146
/*********************************************************************//**
147
Create the index and load in to the dictionary.
148
@return index, or NULL on error */
141
/* out: DB_SUCCESS if all OK */
142
trx_t* trx, /* in/out: transaction */
143
dict_table_t* table); /* in/out: table with new indexes */
144
/*************************************************************************
145
Create the index and load in to the dictionary. */
151
148
row_merge_create_index(
152
149
/*===================*/
153
trx_t* trx, /*!< in/out: trx (sets error_state) */
154
dict_table_t* table, /*!< in: the index is on this table */
155
const merge_index_def_t*index_def);
156
/*!< in: the index definition */
157
/*********************************************************************//**
158
Check if a transaction can use an index.
159
@return TRUE if index can be used by the transaction else FALSE */
150
/* out: index, or NULL on error */
151
trx_t* trx, /* in/out: trx (sets error_state) */
152
dict_table_t* table, /* in: the index is on this table */
153
const merge_index_def_t* /* in: the index definition */
155
#ifdef ROW_MERGE_IS_INDEX_USABLE
156
/*************************************************************************
157
Check if a transaction can use an index. */
162
160
row_merge_is_index_usable(
163
161
/*======================*/
164
const trx_t* trx, /*!< in: transaction */
165
const dict_index_t* index); /*!< in: index to check */
166
/*********************************************************************//**
162
/* out: TRUE if index can be used by
163
the transaction else FALSE*/
164
const trx_t* trx, /* in: transaction */
165
const dict_index_t* index); /* in: index to check */
166
#endif /* ROW_MERGE_IS_INDEX_USABLE */
167
/*************************************************************************
167
168
If there are views that refer to the old table name then we "attach" to
168
the new instance of the table else we drop it immediately.
169
@return DB_SUCCESS or error code */
169
the new instance of the table else we drop it immediately. */
172
172
row_merge_drop_table(
173
173
/*=================*/
174
trx_t* trx, /*!< in: transaction */
175
dict_table_t* table); /*!< in: table instance to drop */
174
/* out: DB_SUCCESS or error code */
175
trx_t* trx, /* in: transaction */
176
dict_table_t* table); /* in: table instance to drop */
177
/*********************************************************************//**
178
/*************************************************************************
178
179
Build indexes on a table by reading a clustered index,
179
180
creating a temporary file containing index entries, merge sorting
180
these index entries and inserting sorted index entries to indexes.
181
@return DB_SUCCESS or error code */
181
these index entries and inserting sorted index entries to indexes. */
184
184
row_merge_build_indexes(
185
185
/*====================*/
186
trx_t* trx, /*!< in: transaction */
187
dict_table_t* old_table, /*!< in: table where rows are
186
/* out: DB_SUCCESS or error code */
187
trx_t* trx, /* in: transaction */
188
dict_table_t* old_table, /* in: table where rows are
189
dict_table_t* new_table, /*!< in: table where indexes are
190
dict_table_t* new_table, /* in: table where indexes are
190
191
created; identical to old_table
191
192
unless creating a PRIMARY KEY */
192
dict_index_t** indexes, /*!< in: indexes to be created */
193
ulint n_indexes, /*!< in: size of indexes[] */
194
TABLE* table); /*!< in/out: MySQL table, for
193
dict_index_t** indexes, /* in: indexes to be created */
194
ulint n_indexes, /* in: size of indexes[] */
195
TABLE* table); /* in/out: MySQL table, for
195
196
reporting erroneous key value
197
198
#endif /* row0merge.h */