390.1.2
by Monty Taylor
Fixed copyright headers in drizzled/ |
1 |
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
|
2 |
* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
|
|
3 |
*
|
|
4 |
* Copyright (C) 2008 Sun Microsystems
|
|
5 |
*
|
|
6 |
* This program is free software; you can redistribute it and/or modify
|
|
7 |
* it under the terms of the GNU General Public License as published by
|
|
8 |
* the Free Software Foundation; version 2 of the License.
|
|
9 |
*
|
|
10 |
* This program is distributed in the hope that it will be useful,
|
|
11 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
13 |
* GNU General Public License for more details.
|
|
14 |
*
|
|
15 |
* You should have received a copy of the GNU General Public License
|
|
16 |
* along with this program; if not, write to the Free Software
|
|
17 |
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
18 |
*/
|
|
1
by brian
clean slate |
19 |
|
520.6.4
by Monty Taylor
Moved thr_lock.h out of common_includes. |
20 |
#ifndef DRIZZLED_HANDLER_H
|
21 |
#define DRIZZLED_HANDLER_H
|
|
1
by brian
clean slate |
22 |
|
520.4.31
by Monty Taylor
Removed server_id from common_includes. |
23 |
#include <drizzled/xid.h> |
24 |
||
1
by brian
clean slate |
25 |
/* Definitions for parameters to do with handler-routines */
|
26 |
||
212.4.2
by Monty Taylor
Fixed the includes in places to make the myisam header file move work. |
27 |
#include <storage/myisam/keycache.h> |
520.6.4
by Monty Taylor
Moved thr_lock.h out of common_includes. |
28 |
#include <mysys/thr_lock.h> |
520.8.3
by Monty Taylor
Moved hash back to mysys. |
29 |
#include <mysys/hash.h> |
520.8.5
by Monty Taylor
Removed sql_string and sql_list from common_includes. |
30 |
#include <drizzled/sql_string.h> |
31 |
#include <drizzled/sql_list.h> |
|
575.1.3
by Monty Taylor
Moved some stuff out of handler.h. |
32 |
#include <drizzled/handlerton.h> |
33 |
#include <drizzled/handler_structs.h> |
|
34 |
#include <drizzled/ha_statistics.h> |
|
520.6.4
by Monty Taylor
Moved thr_lock.h out of common_includes. |
35 |
|
36 |
/* Bits to show what an alter table will do */
|
|
37 |
#include <drizzled/sql_bitmap.h> |
|
38 |
||
39 |
#define HA_MAX_ALTER_FLAGS 40
|
|
40 |
typedef Bitmap<HA_MAX_ALTER_FLAGS> HA_ALTER_FLAGS; |
|
1
by brian
clean slate |
41 |
|
42 |
||
520.1.22
by Brian Aker
Second pass of thd cleanup |
43 |
typedef bool (*qc_engine_callback)(Session *session, char *table_key, |
482
by Brian Aker
Remove uint. |
44 |
uint32_t key_length, |
243.1.1
by Jay Pipes
* Pulled Object_creation_ctx and Default_creation_ctx out of mysql_priv.h |
45 |
uint64_t *engine_data); |
46 |
||
1
by brian
clean slate |
47 |
|
327.1.5
by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h |
48 |
/* The handler for a table type. Will be included in the Table structure */
|
1
by brian
clean slate |
49 |
|
327.1.1
by Brian Aker
First pass in encapsulating table (it is now an object, no longer a structure). |
50 |
class Table; |
561.1.3
by Monty Taylor
Split some more things out of common_includes.h. |
51 |
class TableList; |
1
by brian
clean slate |
52 |
typedef struct st_table_share TABLE_SHARE; |
53 |
struct st_foreign_key_info; |
|
54 |
typedef struct st_foreign_key_info FOREIGN_KEY_INFO; |
|
584.1.13
by Monty Taylor
Split out a little more code. Removed table_list.h from common_includes. |
55 |
struct order_st; |
1
by brian
clean slate |
56 |
|
57 |
class Item; |
|
58 |
struct st_table_log_memory_entry; |
|
59 |
||
575.4.7
by Monty Taylor
More header cleanup. |
60 |
class LEX; |
61 |
typedef class st_select_lex SELECT_LEX; |
|
62 |
typedef class st_select_lex_unit SELECT_LEX_UNIT; |
|
63 |
class Alter_info; |
|
64 |
class select_result; |
|
65 |
class Create_field; |
|
66 |
class sys_var_str; |
|
67 |
class Item_ident; |
|
68 |
typedef struct st_sort_field SORT_FIELD; |
|
69 |
||
70 |
typedef List<Item> List_item; |
|
71 |
||
1
by brian
clean slate |
72 |
typedef struct st_savepoint SAVEPOINT; |
61
by Brian Aker
Conversion of handler type. |
73 |
extern uint32_t savepoint_alloc_size; |
1
by brian
clean slate |
74 |
extern KEY_CREATE_INFO default_key_create_info; |
75 |
||
76 |
/* Forward declaration for condition pushdown to storage engine */
|
|
77 |
typedef class Item COND; |
|
78 |
||
79 |
typedef struct system_status_var SSV; |
|
80 |
||
575.1.3
by Monty Taylor
Moved some stuff out of handler.h. |
81 |
class COST_VECT; |
82 |
||
482
by Brian Aker
Remove uint. |
83 |
uint16_t &mrr_persistent_flag_storage(range_seq_t seq, uint32_t idx); |
84 |
char* &mrr_get_ptr_by_idx(range_seq_t seq, uint32_t idx); |
|
1
by brian
clean slate |
85 |
|
482
by Brian Aker
Remove uint. |
86 |
uint32_t calculate_key_len(Table *, uint, const unsigned char *, key_part_map); |
1
by brian
clean slate |
87 |
/*
|
88 |
bitmap with first N+1 bits set
|
|
89 |
(keypart_map for a key prefix of [0..N] keyparts)
|
|
90 |
*/
|
|
575.1.3
by Monty Taylor
Moved some stuff out of handler.h. |
91 |
template<class T> |
92 |
inline key_part_map make_keypart_map(T a) |
|
93 |
{
|
|
94 |
return (((key_part_map)2 << a) - 1); |
|
95 |
}
|
|
96 |
||
1
by brian
clean slate |
97 |
/*
|
98 |
bitmap with first N bits set
|
|
99 |
(keypart_map for a key prefix of [0..N-1] keyparts)
|
|
100 |
*/
|
|
575.1.3
by Monty Taylor
Moved some stuff out of handler.h. |
101 |
template<class T> |
102 |
inline key_part_map make_prev_keypart_map(T a) |
|
103 |
{
|
|
104 |
return (((key_part_map)1 << a) - 1); |
|
105 |
}
|
|
1
by brian
clean slate |
106 |
|
107 |
/**
|
|
108 |
The handler class is the interface for dynamically loadable
|
|
109 |
storage engines. Do not add ifdefs and take care when adding or
|
|
110 |
changing virtual functions to avoid vtable confusion
|
|
111 |
||
112 |
Functions in this class accept and return table columns data. Two data
|
|
113 |
representation formats are used:
|
|
114 |
1. TableRecordFormat - Used to pass [partial] table records to/from
|
|
115 |
storage engine
|
|
116 |
||
117 |
2. KeyTupleFormat - used to pass index search tuples (aka "keys") to
|
|
118 |
storage engine. See opt_range.cc for description of this format.
|
|
119 |
||
120 |
TableRecordFormat
|
|
121 |
=================
|
|
122 |
[Warning: this description is work in progress and may be incomplete]
|
|
123 |
The table record is stored in a fixed-size buffer:
|
|
124 |
|
|
125 |
record: null_bytes, column1_data, column2_data, ...
|
|
126 |
|
|
127 |
The offsets of the parts of the buffer are also fixed: every column has
|
|
128 |
an offset to its column{i}_data, and if it is nullable it also has its own
|
|
129 |
bit in null_bytes.
|
|
130 |
||
131 |
The record buffer only includes data about columns that are marked in the
|
|
132 |
relevant column set (table->read_set and/or table->write_set, depending on
|
|
133 |
the situation).
|
|
134 |
<not-sure>It could be that it is required that null bits of non-present
|
|
135 |
columns are set to 1</not-sure>
|
|
136 |
||
137 |
VARIOUS EXCEPTIONS AND SPECIAL CASES
|
|
138 |
||
139 |
f the table has no nullable columns, then null_bytes is still
|
|
140 |
present, its length is one byte <not-sure> which must be set to 0xFF
|
|
141 |
at all times. </not-sure>
|
|
142 |
|
|
143 |
If the table has columns of type BIT, then certain bits from those columns
|
|
144 |
may be stored in null_bytes as well. Grep around for Field_bit for
|
|
145 |
details.
|
|
146 |
||
147 |
For blob columns (see Field_blob), the record buffer stores length of the
|
|
148 |
data, following by memory pointer to the blob data. The pointer is owned
|
|
149 |
by the storage engine and is valid until the next operation.
|
|
150 |
||
151 |
If a blob column has NULL value, then its length and blob data pointer
|
|
152 |
must be set to 0.
|
|
153 |
*/
|
|
154 |
||
155 |
class handler :public Sql_alloc |
|
156 |
{
|
|
157 |
public: |
|
158 |
typedef uint64_t Table_flags; |
|
159 |
protected: |
|
160 |
struct st_table_share *table_share; /* The table definition */ |
|
327.1.1
by Brian Aker
First pass in encapsulating table (it is now an object, no longer a structure). |
161 |
Table *table; /* The current open table */ |
1
by brian
clean slate |
162 |
Table_flags cached_table_flags; /* Set on init() and open() */ |
163 |
||
164 |
ha_rows estimation_rows_to_insert; |
|
165 |
public: |
|
166 |
handlerton *ht; /* storage engine of this handler */ |
|
481
by Brian Aker
Remove all of uchar. |
167 |
unsigned char *ref; /* Pointer to current row */ |
168 |
unsigned char *dup_ref; /* Pointer to duplicate row */ |
|
1
by brian
clean slate |
169 |
|
170 |
ha_statistics stats; |
|
171 |
/** MultiRangeRead-related members: */
|
|
172 |
range_seq_t mrr_iter; /* Interator to traverse the range sequence */ |
|
173 |
RANGE_SEQ_IF mrr_funcs; /* Range sequence traversal functions */ |
|
174 |
HANDLER_BUFFER *multi_range_buffer; /* MRR buffer info */ |
|
482
by Brian Aker
Remove uint. |
175 |
uint32_t ranges_in_seq; /* Total number of ranges in the traversed sequence */ |
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
176 |
/* true <=> source MRR ranges and the output are ordered */
|
1
by brian
clean slate |
177 |
bool mrr_is_output_sorted; |
178 |
||
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
179 |
/** true <=> we're currently traversing a range in mrr_cur_range. */
|
1
by brian
clean slate |
180 |
bool mrr_have_range; |
181 |
/** Current range (the one we're now returning rows from) */
|
|
182 |
KEY_MULTI_RANGE mrr_cur_range; |
|
183 |
||
184 |
/** The following are for read_range() */
|
|
185 |
key_range save_end_range, *end_range; |
|
186 |
KEY_PART_INFO *range_key_part; |
|
187 |
int key_compare_result_on_equal; |
|
188 |
bool eq_range; |
|
189 |
/*
|
|
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
190 |
true <=> the engine guarantees that returned records are within the range
|
1
by brian
clean slate |
191 |
being scanned.
|
192 |
*/
|
|
193 |
bool in_range_check_pushed_down; |
|
194 |
||
482
by Brian Aker
Remove uint. |
195 |
uint32_t errkey; /* Last dup key */ |
196 |
uint32_t key_used_on_scan; |
|
197 |
uint32_t active_index; |
|
1
by brian
clean slate |
198 |
/** Length of ref (1-8 or the clustered key length) */
|
482
by Brian Aker
Remove uint. |
199 |
uint32_t ref_length; |
1
by brian
clean slate |
200 |
enum {NONE=0, INDEX, RND} inited; |
201 |
bool locked; |
|
202 |
bool implicit_emptied; /* Can be !=0 only if HEAP */ |
|
203 |
const Item *pushed_cond; |
|
204 |
||
205 |
Item *pushed_idx_cond; |
|
482
by Brian Aker
Remove uint. |
206 |
uint32_t pushed_idx_cond_keyno; /* The index which the above condition is for */ |
1
by brian
clean slate |
207 |
|
208 |
/**
|
|
209 |
next_insert_id is the next value which should be inserted into the
|
|
210 |
auto_increment column: in a inserting-multi-row statement (like INSERT
|
|
211 |
SELECT), for the first row where the autoinc value is not specified by the
|
|
212 |
statement, get_auto_increment() called and asked to generate a value,
|
|
213 |
next_insert_id is set to the next value, then for all other rows
|
|
214 |
next_insert_id is used (and increased each time) without calling
|
|
215 |
get_auto_increment().
|
|
216 |
*/
|
|
217 |
uint64_t next_insert_id; |
|
218 |
/**
|
|
219 |
insert id for the current row (*autogenerated*; if not
|
|
220 |
autogenerated, it's 0).
|
|
221 |
At first successful insertion, this variable is stored into
|
|
520.1.21
by Brian Aker
THD -> Session rename |
222 |
Session::first_successful_insert_id_in_cur_stmt.
|
1
by brian
clean slate |
223 |
*/
|
224 |
uint64_t insert_id_for_cur_row; |
|
225 |
/**
|
|
226 |
Interval returned by get_auto_increment() and being consumed by the
|
|
227 |
inserter.
|
|
228 |
*/
|
|
229 |
Discrete_interval auto_inc_interval_for_cur_row; |
|
230 |
||
231 |
handler(handlerton *ht_arg, TABLE_SHARE *share_arg) |
|
232 |
:table_share(share_arg), table(0), |
|
233 |
estimation_rows_to_insert(0), ht(ht_arg), |
|
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
234 |
ref(0), in_range_check_pushed_down(false), |
1
by brian
clean slate |
235 |
key_used_on_scan(MAX_KEY), active_index(MAX_KEY), |
236 |
ref_length(sizeof(my_off_t)), |
|
137
by Brian Aker
Removed dead FT bits. Small refactoring in sql_plugin.cc |
237 |
inited(NONE), |
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
238 |
locked(false), implicit_emptied(0), |
1
by brian
clean slate |
239 |
pushed_cond(0), pushed_idx_cond(NULL), pushed_idx_cond_keyno(MAX_KEY), |
240 |
next_insert_id(0), insert_id_for_cur_row(0) |
|
241 |
{}
|
|
242 |
virtual ~handler(void) |
|
243 |
{
|
|
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
244 |
assert(locked == false); |
245 |
/* TODO: assert(inited == NONE); */
|
|
1
by brian
clean slate |
246 |
}
|
247 |
virtual handler *clone(MEM_ROOT *mem_root); |
|
248 |
/** This is called after create to allow us to set up cached variables */
|
|
249 |
void init() |
|
250 |
{
|
|
251 |
cached_table_flags= table_flags(); |
|
252 |
}
|
|
575.1.4
by Monty Taylor
Moved implementation of some methods into handler.cc from handler.h. |
253 |
|
1
by brian
clean slate |
254 |
/* ha_ methods: pubilc wrappers for private virtual API */
|
255 |
||
327.1.5
by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h |
256 |
int ha_open(Table *table, const char *name, int mode, int test_if_locked); |
575.1.4
by Monty Taylor
Moved implementation of some methods into handler.cc from handler.h. |
257 |
int ha_index_init(uint32_t idx, bool sorted); |
258 |
int ha_index_end(); |
|
259 |
int ha_rnd_init(bool scan); |
|
260 |
int ha_rnd_end(); |
|
1
by brian
clean slate |
261 |
int ha_reset(); |
575.1.4
by Monty Taylor
Moved implementation of some methods into handler.cc from handler.h. |
262 |
|
1
by brian
clean slate |
263 |
/* this is necessary in many places, e.g. in HANDLER command */
|
575.1.4
by Monty Taylor
Moved implementation of some methods into handler.cc from handler.h. |
264 |
int ha_index_or_rnd_end(); |
265 |
Table_flags ha_table_flags() const; |
|
266 |
||
1
by brian
clean slate |
267 |
/**
|
268 |
These functions represent the public interface to *users* of the
|
|
269 |
handler class, hence they are *not* virtual. For the inheritance
|
|
270 |
interface, see the (private) functions write_row(), update_row(),
|
|
271 |
and delete_row() below.
|
|
272 |
*/
|
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
273 |
int ha_external_lock(Session *session, int lock_type); |
481
by Brian Aker
Remove all of uchar. |
274 |
int ha_write_row(unsigned char * buf); |
275 |
int ha_update_row(const unsigned char * old_data, unsigned char * new_data); |
|
276 |
int ha_delete_row(const unsigned char * buf); |
|
1
by brian
clean slate |
277 |
void ha_release_auto_increment(); |
278 |
||
279 |
int ha_check_for_upgrade(HA_CHECK_OPT *check_opt); |
|
280 |
/** to be actually called to get 'check()' functionality*/
|
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
281 |
int ha_check(Session *session, HA_CHECK_OPT *check_opt); |
282 |
int ha_repair(Session* session, HA_CHECK_OPT* check_opt); |
|
575.1.4
by Monty Taylor
Moved implementation of some methods into handler.cc from handler.h. |
283 |
void ha_start_bulk_insert(ha_rows rows); |
284 |
int ha_end_bulk_insert(); |
|
481
by Brian Aker
Remove all of uchar. |
285 |
int ha_bulk_update_row(const unsigned char *old_data, unsigned char *new_data, |
482
by Brian Aker
Remove uint. |
286 |
uint32_t *dup_key_found); |
1
by brian
clean slate |
287 |
int ha_delete_all_rows(); |
288 |
int ha_reset_auto_increment(uint64_t value); |
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
289 |
int ha_optimize(Session* session, HA_CHECK_OPT* check_opt); |
290 |
int ha_analyze(Session* session, HA_CHECK_OPT* check_opt); |
|
291 |
bool ha_check_and_repair(Session *session); |
|
482
by Brian Aker
Remove uint. |
292 |
int ha_disable_indexes(uint32_t mode); |
293 |
int ha_enable_indexes(uint32_t mode); |
|
200
by Brian Aker
my_bool from handler and set_var |
294 |
int ha_discard_or_import_tablespace(bool discard); |
1
by brian
clean slate |
295 |
void ha_prepare_for_alter(); |
296 |
int ha_rename_table(const char *from, const char *to); |
|
297 |
int ha_delete_table(const char *name); |
|
298 |
void ha_drop_table(const char *name); |
|
299 |
||
327.1.5
by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h |
300 |
int ha_create(const char *name, Table *form, HA_CREATE_INFO *info); |
1
by brian
clean slate |
301 |
|
302 |
int ha_create_handler_files(const char *name, const char *old_name, |
|
303 |
int action_flag, HA_CREATE_INFO *info); |
|
304 |
||
305 |
void adjust_next_insert_id_after_explicit_value(uint64_t nr); |
|
306 |
int update_auto_increment(); |
|
482
by Brian Aker
Remove uint. |
307 |
void print_keydup_error(uint32_t key_nr, const char *msg); |
1
by brian
clean slate |
308 |
virtual void print_error(int error, myf errflag); |
309 |
virtual bool get_error_message(int error, String *buf); |
|
482
by Brian Aker
Remove uint. |
310 |
uint32_t get_dup_key(int error); |
575.1.4
by Monty Taylor
Moved implementation of some methods into handler.cc from handler.h. |
311 |
virtual void change_table_ptr(Table *table_arg, TABLE_SHARE *share); |
312 |
||
1
by brian
clean slate |
313 |
/* Estimates calculation */
|
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
314 |
virtual double scan_time(void) |
151
by Brian Aker
Ulonglong to uint64_t |
315 |
{ return uint64_t2double(stats.data_file_length) / IO_SIZE + 2; } |
482
by Brian Aker
Remove uint. |
316 |
virtual double read_time(uint32_t index __attribute__((unused)), |
317 |
uint32_t ranges, ha_rows rows) |
|
1
by brian
clean slate |
318 |
{ return rows2double(ranges+rows); } |
319 |
||
482
by Brian Aker
Remove uint. |
320 |
virtual double index_only_read_time(uint32_t keynr, double records); |
1
by brian
clean slate |
321 |
|
482
by Brian Aker
Remove uint. |
322 |
virtual ha_rows multi_range_read_info_const(uint32_t keyno, RANGE_SEQ_IF *seq, |
1
by brian
clean slate |
323 |
void *seq_init_param, |
482
by Brian Aker
Remove uint. |
324 |
uint32_t n_ranges, uint32_t *bufsz, |
325 |
uint32_t *flags, COST_VECT *cost); |
|
326 |
virtual int multi_range_read_info(uint32_t keyno, uint32_t n_ranges, uint32_t keys, |
|
327 |
uint32_t *bufsz, uint32_t *flags, COST_VECT *cost); |
|
1
by brian
clean slate |
328 |
virtual int multi_range_read_init(RANGE_SEQ_IF *seq, void *seq_init_param, |
482
by Brian Aker
Remove uint. |
329 |
uint32_t n_ranges, uint32_t mode, |
1
by brian
clean slate |
330 |
HANDLER_BUFFER *buf); |
331 |
virtual int multi_range_read_next(char **range_info); |
|
332 |
||
333 |
||
575.1.4
by Monty Taylor
Moved implementation of some methods into handler.cc from handler.h. |
334 |
virtual const key_map *keys_to_use_for_scanning(); |
335 |
bool has_transactions(); |
|
482
by Brian Aker
Remove uint. |
336 |
virtual uint32_t extra_rec_buf_length() const { return 0; } |
1
by brian
clean slate |
337 |
|
338 |
/**
|
|
339 |
This method is used to analyse the error to see whether the error
|
|
340 |
is ignorable or not, certain handlers can have more error that are
|
|
341 |
ignorable than others. E.g. the partition handler can get inserts
|
|
342 |
into a range where there is no partition and this is an ignorable
|
|
343 |
error.
|
|
344 |
HA_ERR_FOUND_DUP_UNIQUE is a special case in MyISAM that means the
|
|
345 |
same thing as HA_ERR_FOUND_DUP_KEY but can in some cases lead to
|
|
346 |
a slightly different error message.
|
|
347 |
*/
|
|
575.1.4
by Monty Taylor
Moved implementation of some methods into handler.cc from handler.h. |
348 |
virtual bool is_fatal_error(int error, uint32_t flags); |
1
by brian
clean slate |
349 |
|
350 |
/**
|
|
351 |
Number of rows in table. It will only be called if
|
|
352 |
(table_flags() & (HA_HAS_RECORDS | HA_STATS_RECORDS_IS_EXACT)) != 0
|
|
353 |
*/
|
|
575.1.5
by Monty Taylor
Moved stuff to handlerton.cc |
354 |
virtual ha_rows records(); |
1
by brian
clean slate |
355 |
/**
|
356 |
Return upper bound of current number of records in the table
|
|
357 |
(max. of how many records one will retrieve when doing a full table scan)
|
|
358 |
If upper bound is not known, HA_POS_ERROR should be returned as a max
|
|
359 |
possible upper bound.
|
|
360 |
*/
|
|
361 |
virtual ha_rows estimate_rows_upper_bound() |
|
362 |
{ return stats.records+EXTRA_RECORDS; } |
|
363 |
||
364 |
/**
|
|
365 |
Get the row type from the storage engine. If this method returns
|
|
366 |
ROW_TYPE_NOT_USED, the information in HA_CREATE_INFO should be used.
|
|
367 |
*/
|
|
368 |
virtual enum row_type get_row_type() const { return ROW_TYPE_NOT_USED; } |
|
369 |
||
482
by Brian Aker
Remove uint. |
370 |
virtual const char *index_type(uint32_t key_number __attribute__((unused))) |
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
371 |
{ assert(0); return "";} |
1
by brian
clean slate |
372 |
|
373 |
||
374 |
/**
|
|
375 |
Signal that the table->read_set and table->write_set table maps changed
|
|
376 |
The handler is allowed to set additional bits in the above map in this
|
|
377 |
call. Normally the handler should ignore all calls until we have done
|
|
378 |
a ha_rnd_init() or ha_index_init(), write_row(), update_row or delete_row()
|
|
379 |
as there may be several calls to this routine.
|
|
380 |
*/
|
|
381 |
virtual void column_bitmaps_signal(); |
|
482
by Brian Aker
Remove uint. |
382 |
uint32_t get_index(void) const { return active_index; } |
1
by brian
clean slate |
383 |
virtual int close(void)=0; |
384 |
||
385 |
/**
|
|
386 |
@retval 0 Bulk update used by handler
|
|
387 |
@retval 1 Bulk update not used, normal operation used
|
|
388 |
*/
|
|
389 |
virtual bool start_bulk_update() { return 1; } |
|
390 |
/**
|
|
391 |
@retval 0 Bulk delete used by handler
|
|
392 |
@retval 1 Bulk delete not used, normal operation used
|
|
393 |
*/
|
|
394 |
virtual bool start_bulk_delete() { return 1; } |
|
395 |
/**
|
|
396 |
After this call all outstanding updates must be performed. The number
|
|
397 |
of duplicate key errors are reported in the duplicate key parameter.
|
|
398 |
It is allowed to continue to the batched update after this call, the
|
|
399 |
handler has to wait until end_bulk_update with changing state.
|
|
400 |
||
401 |
@param dup_key_found Number of duplicate keys found
|
|
402 |
||
403 |
@retval 0 Success
|
|
404 |
@retval >0 Error code
|
|
405 |
*/
|
|
482
by Brian Aker
Remove uint. |
406 |
virtual int exec_bulk_update(uint32_t *dup_key_found __attribute__((unused))) |
1
by brian
clean slate |
407 |
{
|
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
408 |
assert(false); |
1
by brian
clean slate |
409 |
return HA_ERR_WRONG_COMMAND; |
410 |
}
|
|
411 |
/**
|
|
412 |
Perform any needed clean-up, no outstanding updates are there at the
|
|
413 |
moment.
|
|
414 |
*/
|
|
415 |
virtual void end_bulk_update() { return; } |
|
416 |
/**
|
|
417 |
Execute all outstanding deletes and close down the bulk delete.
|
|
418 |
||
419 |
@retval 0 Success
|
|
420 |
@retval >0 Error code
|
|
421 |
*/
|
|
422 |
virtual int end_bulk_delete() |
|
423 |
{
|
|
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
424 |
assert(false); |
1
by brian
clean slate |
425 |
return HA_ERR_WRONG_COMMAND; |
426 |
}
|
|
427 |
/**
|
|
428 |
@brief
|
|
429 |
Positions an index cursor to the index specified in the handle. Fetches the
|
|
430 |
row if available. If the key value is null, begin at the first key of the
|
|
431 |
index.
|
|
432 |
*/
|
|
481
by Brian Aker
Remove all of uchar. |
433 |
virtual int index_read_map(unsigned char * buf, const unsigned char * key, |
1
by brian
clean slate |
434 |
key_part_map keypart_map, |
435 |
enum ha_rkey_function find_flag) |
|
436 |
{
|
|
482
by Brian Aker
Remove uint. |
437 |
uint32_t key_len= calculate_key_len(table, active_index, key, keypart_map); |
1
by brian
clean slate |
438 |
return index_read(buf, key, key_len, find_flag); |
439 |
}
|
|
440 |
/**
|
|
441 |
@brief
|
|
442 |
Positions an index cursor to the index specified in the handle. Fetches the
|
|
443 |
row if available. If the key value is null, begin at the first key of the
|
|
444 |
index.
|
|
445 |
*/
|
|
482
by Brian Aker
Remove uint. |
446 |
virtual int index_read_idx_map(unsigned char * buf, uint32_t index, const unsigned char * key, |
1
by brian
clean slate |
447 |
key_part_map keypart_map, |
448 |
enum ha_rkey_function find_flag); |
|
481
by Brian Aker
Remove all of uchar. |
449 |
virtual int index_next(unsigned char * buf __attribute__((unused))) |
450 |
{ return HA_ERR_WRONG_COMMAND; } |
|
451 |
virtual int index_prev(unsigned char * buf __attribute__((unused))) |
|
452 |
{ return HA_ERR_WRONG_COMMAND; } |
|
453 |
virtual int index_first(unsigned char * buf __attribute__((unused))) |
|
454 |
{ return HA_ERR_WRONG_COMMAND; } |
|
455 |
virtual int index_last(unsigned char * buf __attribute__((unused))) |
|
456 |
{ return HA_ERR_WRONG_COMMAND; } |
|
457 |
virtual int index_next_same(unsigned char *buf __attribute__((unused)), |
|
458 |
const unsigned char *key __attribute__((unused)), |
|
482
by Brian Aker
Remove uint. |
459 |
uint32_t keylen __attribute__((unused))); |
1
by brian
clean slate |
460 |
/**
|
461 |
@brief
|
|
462 |
The following functions works like index_read, but it find the last
|
|
463 |
row with the current key value or prefix.
|
|
464 |
*/
|
|
481
by Brian Aker
Remove all of uchar. |
465 |
virtual int index_read_last_map(unsigned char * buf, const unsigned char * key, |
1
by brian
clean slate |
466 |
key_part_map keypart_map) |
467 |
{
|
|
482
by Brian Aker
Remove uint. |
468 |
uint32_t key_len= calculate_key_len(table, active_index, key, keypart_map); |
1
by brian
clean slate |
469 |
return index_read_last(buf, key, key_len); |
470 |
}
|
|
471 |
virtual int read_range_first(const key_range *start_key, |
|
472 |
const key_range *end_key, |
|
473 |
bool eq_range, bool sorted); |
|
474 |
virtual int read_range_next(); |
|
475 |
int compare_key(key_range *range); |
|
476 |
int compare_key2(key_range *range); |
|
481
by Brian Aker
Remove all of uchar. |
477 |
virtual int rnd_next(unsigned char *buf __attribute__((unused)))=0; |
478 |
virtual int rnd_pos(unsigned char * buf __attribute__((unused)), |
|
479 |
unsigned char *pos __attribute__((unused)))=0; |
|
1
by brian
clean slate |
480 |
/**
|
481 |
One has to use this method when to find
|
|
482 |
random position by record as the plain
|
|
483 |
position() call doesn't work for some
|
|
484 |
handlers for random position.
|
|
485 |
*/
|
|
481
by Brian Aker
Remove all of uchar. |
486 |
virtual int rnd_pos_by_record(unsigned char *record); |
482
by Brian Aker
Remove uint. |
487 |
virtual int read_first_row(unsigned char *buf, uint32_t primary_key); |
1
by brian
clean slate |
488 |
/**
|
489 |
The following function is only needed for tables that may be temporary
|
|
490 |
tables during joins.
|
|
491 |
*/
|
|
481
by Brian Aker
Remove all of uchar. |
492 |
virtual int restart_rnd_next(unsigned char *buf __attribute__((unused)), |
493 |
unsigned char *pos __attribute__((unused))) |
|
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
494 |
{ return HA_ERR_WRONG_COMMAND; } |
481
by Brian Aker
Remove all of uchar. |
495 |
virtual int rnd_same(unsigned char *buf __attribute__((unused)), |
482
by Brian Aker
Remove uint. |
496 |
uint32_t inx __attribute__((unused))) |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
497 |
{ return HA_ERR_WRONG_COMMAND; } |
482
by Brian Aker
Remove uint. |
498 |
virtual ha_rows records_in_range(uint32_t inx __attribute__((unused)), |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
499 |
key_range *min_key __attribute__((unused)), |
500 |
key_range *max_key __attribute__((unused))) |
|
1
by brian
clean slate |
501 |
{ return (ha_rows) 10; } |
481
by Brian Aker
Remove all of uchar. |
502 |
virtual void position(const unsigned char *record)=0; |
1
by brian
clean slate |
503 |
virtual int info(uint)=0; // see my_base.h for full description |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
504 |
virtual uint32_t calculate_key_hash_value(Field **field_array __attribute__((unused))) |
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
505 |
{ assert(0); return 0; } |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
506 |
virtual int extra(enum ha_extra_function operation __attribute__((unused))) |
1
by brian
clean slate |
507 |
{ return 0; } |
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
508 |
virtual int extra_opt(enum ha_extra_function operation, |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
509 |
uint32_t cache_size __attribute__((unused))) |
1
by brian
clean slate |
510 |
{ return extra(operation); } |
511 |
||
512 |
/**
|
|
513 |
In an UPDATE or DELETE, if the row under the cursor was locked by another
|
|
514 |
transaction, and the engine used an optimistic read of the last
|
|
515 |
committed row value under the cursor, then the engine returns 1 from this
|
|
516 |
function. MySQL must NOT try to update this optimistic value. If the
|
|
517 |
optimistic value does not match the WHERE condition, MySQL can decide to
|
|
518 |
skip over this row. Currently only works for InnoDB. This can be used to
|
|
519 |
avoid unnecessary lock waits.
|
|
520 |
||
521 |
If this method returns nonzero, it will also signal the storage
|
|
522 |
engine that the next read will be a locking re-read of the row.
|
|
523 |
*/
|
|
524 |
virtual bool was_semi_consistent_read() { return 0; } |
|
525 |
/**
|
|
526 |
Tell the engine whether it should avoid unnecessary lock waits.
|
|
527 |
If yes, in an UPDATE or DELETE, if the row under the cursor was locked
|
|
528 |
by another transaction, the engine may try an optimistic read of
|
|
529 |
the last committed row value under the cursor.
|
|
530 |
*/
|
|
531 |
virtual void try_semi_consistent_read(bool) {} |
|
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
532 |
virtual void unlock_row(void) {} |
520.1.22
by Brian Aker
Second pass of thd cleanup |
533 |
virtual int start_stmt(Session *session __attribute__((unused)), |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
534 |
thr_lock_type lock_type __attribute__((unused))) |
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
535 |
{return 0;} |
1
by brian
clean slate |
536 |
virtual void get_auto_increment(uint64_t offset, uint64_t increment, |
537 |
uint64_t nb_desired_values, |
|
538 |
uint64_t *first_value, |
|
539 |
uint64_t *nb_reserved_values); |
|
540 |
void set_next_insert_id(uint64_t id) |
|
541 |
{
|
|
542 |
next_insert_id= id; |
|
543 |
}
|
|
544 |
void restore_auto_increment(uint64_t prev_insert_id) |
|
545 |
{
|
|
546 |
/*
|
|
547 |
Insertion of a row failed, re-use the lastly generated auto_increment
|
|
548 |
id, for the next row. This is achieved by resetting next_insert_id to
|
|
549 |
what it was before the failed insertion (that old value is provided by
|
|
550 |
the caller). If that value was 0, it was the first row of the INSERT;
|
|
551 |
then if insert_id_for_cur_row contains 0 it means no id was generated
|
|
552 |
for this first row, so no id was generated since the INSERT started, so
|
|
553 |
we should set next_insert_id to 0; if insert_id_for_cur_row is not 0, it
|
|
554 |
is the generated id of the first and failed row, so we use it.
|
|
555 |
*/
|
|
556 |
next_insert_id= (prev_insert_id > 0) ? prev_insert_id : |
|
557 |
insert_id_for_cur_row; |
|
558 |
}
|
|
559 |
||
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
560 |
virtual void update_create_info(HA_CREATE_INFO *create_info __attribute__((unused))) {} |
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
561 |
int check_old_types(void); |
520.1.22
by Brian Aker
Second pass of thd cleanup |
562 |
virtual int assign_to_keycache(Session* session __attribute__((unused)), |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
563 |
HA_CHECK_OPT* check_opt __attribute__((unused))) |
1
by brian
clean slate |
564 |
{ return HA_ADMIN_NOT_IMPLEMENTED; } |
565 |
/* end of the list of admin commands */
|
|
566 |
||
567 |
virtual int indexes_are_disabled(void) {return 0;} |
|
568 |
virtual char *update_table_comment(const char * comment) |
|
569 |
{ return (char*) comment;} |
|
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
570 |
virtual void append_create_info(String *packet __attribute__((unused))) |
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
571 |
{}
|
1
by brian
clean slate |
572 |
/**
|
573 |
If index == MAX_KEY then a check for table is made and if index <
|
|
574 |
MAX_KEY then a check is made if the table has foreign keys and if
|
|
575 |
a foreign key uses this index (and thus the index cannot be dropped).
|
|
576 |
||
577 |
@param index Index to check if foreign key uses it
|
|
578 |
||
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
579 |
@retval true Foreign key defined on table or index
|
580 |
@retval false No foreign key defined
|
|
1
by brian
clean slate |
581 |
*/
|
482
by Brian Aker
Remove uint. |
582 |
virtual bool is_fk_defined_on_table_or_index(uint32_t index __attribute__((unused))) |
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
583 |
{ return false; } |
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
584 |
virtual char* get_foreign_key_create_info(void) |
1
by brian
clean slate |
585 |
{ return(NULL);} /* gets foreign key create string from InnoDB */ |
327.1.5
by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h |
586 |
/** used in ALTER Table; 1 if changing storage engine is allowed */
|
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
587 |
virtual bool can_switch_engines(void) { return 1; } |
1
by brian
clean slate |
588 |
/** used in REPLACE; is > 0 if table is referred by a FOREIGN KEY */
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
589 |
virtual int get_foreign_key_list(Session *session __attribute__((unused)), |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
590 |
List<FOREIGN_KEY_INFO> *f_key_list __attribute__((unused))) |
1
by brian
clean slate |
591 |
{ return 0; } |
482
by Brian Aker
Remove uint. |
592 |
virtual uint32_t referenced_by_foreign_key() { return 0;} |
1
by brian
clean slate |
593 |
virtual void init_table_handle_for_HANDLER() |
594 |
{ return; } /* prepare InnoDB for HANDLER */ |
|
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
595 |
virtual void free_foreign_key_create_info(char* str __attribute__((unused))) {} |
1
by brian
clean slate |
596 |
/** The following can be called without an open handler */
|
597 |
virtual const char *table_type() const =0; |
|
598 |
/**
|
|
599 |
If frm_error() is called then we will use this to find out what file
|
|
600 |
extentions exist for the storage engine. This is also used by the default
|
|
601 |
rename_table and delete_table method in handler.cc.
|
|
602 |
||
603 |
For engines that have two file name extentions (separate meta/index file
|
|
604 |
and data file), the order of elements is relevant. First element of engine
|
|
605 |
file name extentions array should be meta/index file extention. Second
|
|
606 |
element - data file extention. This order is assumed by
|
|
327.1.5
by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h |
607 |
prepare_for_repair() when REPAIR Table ... USE_FRM is issued.
|
1
by brian
clean slate |
608 |
*/
|
609 |
virtual const char **bas_ext() const =0; |
|
610 |
||
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
611 |
virtual int get_default_no_partitions(HA_CREATE_INFO *info __attribute__((unused))) { return 1;} |
612 |
virtual bool get_no_parts(const char *name __attribute__((unused)), |
|
482
by Brian Aker
Remove uint. |
613 |
uint32_t *no_parts) |
1
by brian
clean slate |
614 |
{
|
615 |
*no_parts= 0; |
|
616 |
return 0; |
|
617 |
}
|
|
618 |
||
482
by Brian Aker
Remove uint. |
619 |
virtual uint32_t index_flags(uint32_t idx, uint32_t part, bool all_parts) const =0; |
1
by brian
clean slate |
620 |
|
327.1.5
by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h |
621 |
virtual int add_index(Table *table_arg __attribute__((unused)), |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
622 |
KEY *key_info __attribute__((unused)), |
482
by Brian Aker
Remove uint. |
623 |
uint32_t num_of_keys __attribute__((unused))) |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
624 |
{ return (HA_ERR_WRONG_COMMAND); } |
327.1.5
by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h |
625 |
virtual int prepare_drop_index(Table *table_arg __attribute__((unused)), |
482
by Brian Aker
Remove uint. |
626 |
uint32_t *key_num __attribute__((unused)), |
627 |
uint32_t num_of_keys __attribute__((unused))) |
|
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
628 |
{ return (HA_ERR_WRONG_COMMAND); } |
327.1.5
by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h |
629 |
virtual int final_drop_index(Table *table_arg __attribute__((unused))) |
1
by brian
clean slate |
630 |
{ return (HA_ERR_WRONG_COMMAND); } |
631 |
||
482
by Brian Aker
Remove uint. |
632 |
uint32_t max_record_length() const |
398.1.4
by Monty Taylor
Renamed max/min. |
633 |
{ return cmin((unsigned int)HA_MAX_REC_LENGTH, max_supported_record_length()); } |
482
by Brian Aker
Remove uint. |
634 |
uint32_t max_keys() const |
398.1.4
by Monty Taylor
Renamed max/min. |
635 |
{ return cmin((unsigned int)MAX_KEY, max_supported_keys()); } |
482
by Brian Aker
Remove uint. |
636 |
uint32_t max_key_parts() const |
398.1.4
by Monty Taylor
Renamed max/min. |
637 |
{ return cmin((unsigned int)MAX_REF_PARTS, max_supported_key_parts()); } |
482
by Brian Aker
Remove uint. |
638 |
uint32_t max_key_length() const |
398.1.4
by Monty Taylor
Renamed max/min. |
639 |
{ return cmin((unsigned int)MAX_KEY_LENGTH, max_supported_key_length()); } |
482
by Brian Aker
Remove uint. |
640 |
uint32_t max_key_part_length(void) const |
398.1.4
by Monty Taylor
Renamed max/min. |
641 |
{ return cmin((unsigned int)MAX_KEY_LENGTH, max_supported_key_part_length()); } |
1
by brian
clean slate |
642 |
|
482
by Brian Aker
Remove uint. |
643 |
virtual uint32_t max_supported_record_length(void) const |
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
644 |
{ return HA_MAX_REC_LENGTH; } |
482
by Brian Aker
Remove uint. |
645 |
virtual uint32_t max_supported_keys(void) const { return 0; } |
646 |
virtual uint32_t max_supported_key_parts(void) const { return MAX_REF_PARTS; } |
|
647 |
virtual uint32_t max_supported_key_length(void) const { return MAX_KEY_LENGTH; } |
|
648 |
virtual uint32_t max_supported_key_part_length(void) const { return 255; } |
|
649 |
virtual uint32_t min_record_length(uint32_t options __attribute__((unused))) const |
|
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
650 |
{ return 1; } |
1
by brian
clean slate |
651 |
|
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
652 |
virtual bool low_byte_first(void) const { return 1; } |
482
by Brian Aker
Remove uint. |
653 |
virtual uint32_t checksum(void) const { return 0; } |
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
654 |
virtual bool is_crashed(void) const { return 0; } |
655 |
virtual bool auto_repair(void) const { return 0; } |
|
1
by brian
clean slate |
656 |
|
657 |
||
658 |
#define CHF_CREATE_FLAG 0
|
|
659 |
#define CHF_DELETE_FLAG 1
|
|
660 |
#define CHF_RENAME_FLAG 2
|
|
661 |
||
662 |
||
663 |
/**
|
|
664 |
@note lock_count() can return > 1 if the table is MERGE or partitioned.
|
|
665 |
*/
|
|
482
by Brian Aker
Remove uint. |
666 |
virtual uint32_t lock_count(void) const { return 1; } |
1
by brian
clean slate |
667 |
/**
|
668 |
Is not invoked for non-transactional temporary tables.
|
|
669 |
||
670 |
@note store_lock() can return more than one lock if the table is MERGE
|
|
671 |
or partitioned.
|
|
672 |
||
673 |
@note that one can NOT rely on table->in_use in store_lock(). It may
|
|
674 |
refer to a different thread if called from mysql_lock_abort_for_thread().
|
|
675 |
||
676 |
@note If the table is MERGE, store_lock() can return less locks
|
|
677 |
than lock_count() claimed. This can happen when the MERGE children
|
|
678 |
are not attached when this is called from another thread.
|
|
679 |
*/
|
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
680 |
virtual THR_LOCK_DATA **store_lock(Session *session, |
1
by brian
clean slate |
681 |
THR_LOCK_DATA **to, |
682 |
enum thr_lock_type lock_type)=0; |
|
683 |
||
684 |
/** Type of table for caching query */
|
|
206
by Brian Aker
Removed final uint dead types. |
685 |
virtual uint8_t table_cache_type() { return HA_CACHE_TBL_NONTRANSACT; } |
1
by brian
clean slate |
686 |
|
687 |
||
688 |
/**
|
|
689 |
@brief Register a named table with a call back function to the query cache.
|
|
690 |
||
520.1.22
by Brian Aker
Second pass of thd cleanup |
691 |
@param session The thread handle
|
1
by brian
clean slate |
692 |
@param table_key A pointer to the table name in the table cache
|
693 |
@param key_length The length of the table name
|
|
694 |
@param[out] engine_callback The pointer to the storage engine call back
|
|
695 |
function
|
|
696 |
@param[out] engine_data Storage engine specific data which could be
|
|
697 |
anything
|
|
698 |
||
699 |
This method offers the storage engine, the possibility to store a reference
|
|
700 |
to a table name which is going to be used with query cache.
|
|
701 |
The method is called each time a statement is written to the cache and can
|
|
702 |
be used to verify if a specific statement is cachable. It also offers
|
|
703 |
the possibility to register a generic (but static) call back function which
|
|
704 |
is called each time a statement is matched against the query cache.
|
|
705 |
||
706 |
@note If engine_data supplied with this function is different from
|
|
707 |
engine_data supplied with the callback function, and the callback returns
|
|
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
708 |
false, a table invalidation on the current table will occur.
|
1
by brian
clean slate |
709 |
|
710 |
@return Upon success the engine_callback will point to the storage engine
|
|
711 |
call back function, if any, and engine_data will point to any storage
|
|
712 |
engine data used in the specific implementation.
|
|
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
713 |
@retval true Success
|
714 |
@retval false The specified table or current statement should not be
|
|
1
by brian
clean slate |
715 |
cached
|
716 |
*/
|
|
717 |
||
200
by Brian Aker
my_bool from handler and set_var |
718 |
virtual bool |
520.1.22
by Brian Aker
Second pass of thd cleanup |
719 |
register_query_cache_table(Session *session __attribute__((unused)), |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
720 |
char *table_key __attribute__((unused)), |
482
by Brian Aker
Remove uint. |
721 |
uint32_t key_length __attribute__((unused)), |
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
722 |
qc_engine_callback *engine_callback, |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
723 |
uint64_t *engine_data __attribute__((unused))) |
1
by brian
clean slate |
724 |
{
|
725 |
*engine_callback= 0; |
|
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
726 |
return true; |
1
by brian
clean slate |
727 |
}
|
728 |
||
729 |
||
730 |
/*
|
|
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
731 |
@retval true Primary key (if there is one) is clustered
|
1
by brian
clean slate |
732 |
key covering all fields
|
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
733 |
@retval false otherwise
|
1
by brian
clean slate |
734 |
*/
|
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
735 |
virtual bool primary_key_is_clustered() { return false; } |
481
by Brian Aker
Remove all of uchar. |
736 |
virtual int cmp_ref(const unsigned char *ref1, const unsigned char *ref2) |
1
by brian
clean slate |
737 |
{
|
738 |
return memcmp(ref1, ref2, ref_length); |
|
739 |
}
|
|
740 |
||
741 |
/*
|
|
742 |
Condition pushdown to storage engines
|
|
743 |
*/
|
|
744 |
||
745 |
/**
|
|
746 |
Push condition down to the table handler.
|
|
747 |
||
748 |
@param cond Condition to be pushed. The condition tree must not be
|
|
749 |
modified by the by the caller.
|
|
750 |
||
751 |
@return
|
|
752 |
The 'remainder' condition that caller must use to filter out records.
|
|
753 |
NULL means the handler will not return rows that do not match the
|
|
754 |
passed condition.
|
|
755 |
||
756 |
@note
|
|
757 |
The pushed conditions form a stack (from which one can remove the
|
|
758 |
last pushed condition using cond_pop).
|
|
759 |
The table handler filters out rows using (pushed_cond1 AND pushed_cond2
|
|
760 |
AND ... AND pushed_condN)
|
|
761 |
or less restrictive condition, depending on handler's capabilities.
|
|
762 |
||
763 |
handler->ha_reset() call empties the condition stack.
|
|
764 |
Calls to rnd_init/rnd_end, index_init/index_end etc do not affect the
|
|
765 |
condition stack.
|
|
766 |
*/
|
|
767 |
virtual const COND *cond_push(const COND *cond) { return cond; } |
|
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
768 |
|
1
by brian
clean slate |
769 |
/**
|
770 |
Pop the top condition from the condition stack of the handler instance.
|
|
771 |
||
772 |
Pops the top if condition stack, if stack is not empty.
|
|
773 |
*/
|
|
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
774 |
virtual void cond_pop(void) { return; } |
1
by brian
clean slate |
775 |
|
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
776 |
virtual Item |
482
by Brian Aker
Remove uint. |
777 |
*idx_cond_push(uint32_t keyno __attribute__((unused)), |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
778 |
Item* idx_cond __attribute__((unused))) |
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
779 |
{ return idx_cond; } |
1
by brian
clean slate |
780 |
|
781 |
/*
|
|
782 |
Part of old fast alter table, to be depricated
|
|
783 |
*/
|
|
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
784 |
virtual bool |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
785 |
check_if_incompatible_data(HA_CREATE_INFO *create_info __attribute__((unused)), |
482
by Brian Aker
Remove uint. |
786 |
uint32_t table_changes __attribute__((unused))) |
1
by brian
clean slate |
787 |
{ return COMPATIBLE_DATA_NO; } |
788 |
||
327.1.5
by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h |
789 |
/* On-line ALTER Table interface */
|
1
by brian
clean slate |
790 |
|
791 |
/**
|
|
792 |
Check if a storage engine supports a particular alter table on-line
|
|
793 |
||
794 |
@param altered_table A temporary table show what table is to
|
|
795 |
change to
|
|
796 |
@param create_info Information from the parsing phase about new
|
|
797 |
table properties.
|
|
798 |
@param alter_flags Bitmask that shows what will be changed
|
|
799 |
@param table_changes Shows if table layout has changed (for
|
|
800 |
backwards compatibility with
|
|
801 |
check_if_incompatible_data
|
|
802 |
||
803 |
@retval HA_ALTER_ERROR Unexpected error
|
|
804 |
@retval HA_ALTER_SUPPORTED_WAIT_LOCK Supported, but requires DDL lock
|
|
805 |
@retval HA_ALTER_SUPPORTED_NO_LOCK Supported
|
|
806 |
@retval HA_ALTER_NOT_SUPPORTED Not supported
|
|
807 |
||
808 |
@note
|
|
809 |
The default implementation is implemented to support fast
|
|
810 |
alter table (storage engines that support some changes by
|
|
811 |
just changing the frm file) without any change in the handler
|
|
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
812 |
implementation.
|
1
by brian
clean slate |
813 |
*/
|
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
814 |
virtual int |
327.1.5
by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h |
815 |
check_if_supported_alter(Table *altered_table __attribute__((unused)), |
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
816 |
HA_CREATE_INFO *create_info, |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
817 |
HA_ALTER_FLAGS *alter_flags __attribute__((unused)), |
482
by Brian Aker
Remove uint. |
818 |
uint32_t table_changes) |
1
by brian
clean slate |
819 |
{
|
820 |
if (this->check_if_incompatible_data(create_info, table_changes) |
|
821 |
== COMPATIBLE_DATA_NO) |
|
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
822 |
return(HA_ALTER_NOT_SUPPORTED); |
383.7.1
by Andrey Zhakov
Initial submit of code and tests |
823 |
else if ((*alter_flags & HA_ALTER_STORED_VCOL).is_set()) |
824 |
return(HA_ALTER_NOT_SUPPORTED); |
|
1
by brian
clean slate |
825 |
else
|
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
826 |
return(HA_ALTER_SUPPORTED_WAIT_LOCK); |
1
by brian
clean slate |
827 |
}
|
828 |
/**
|
|
829 |
Tell storage engine to prepare for the on-line alter table (pre-alter)
|
|
830 |
||
520.1.22
by Brian Aker
Second pass of thd cleanup |
831 |
@param session The thread handle
|
1
by brian
clean slate |
832 |
@param altered_table A temporary table show what table is to
|
833 |
change to
|
|
834 |
@param alter_info Storage place for data used during phase1
|
|
835 |
and phase2
|
|
836 |
@param alter_flags Bitmask that shows what will be changed
|
|
837 |
||
838 |
@retval 0 OK
|
|
839 |
@retval error error code passed from storage engine
|
|
840 |
*/
|
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
841 |
virtual int alter_table_phase1(Session *session __attribute__((unused)), |
327.1.5
by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h |
842 |
Table *altered_table __attribute__((unused)), |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
843 |
HA_CREATE_INFO *create_info __attribute__((unused)), |
844 |
HA_ALTER_INFO *alter_info __attribute__((unused)), |
|
845 |
HA_ALTER_FLAGS *alter_flags __attribute__((unused))) |
|
1
by brian
clean slate |
846 |
{
|
847 |
return HA_ERR_UNSUPPORTED; |
|
848 |
}
|
|
849 |
/**
|
|
850 |
Tell storage engine to perform the on-line alter table (alter)
|
|
851 |
||
520.1.22
by Brian Aker
Second pass of thd cleanup |
852 |
@param session The thread handle
|
1
by brian
clean slate |
853 |
@param altered_table A temporary table show what table is to
|
854 |
change to
|
|
855 |
@param alter_info Storage place for data used during phase1
|
|
856 |
and phase2
|
|
857 |
@param alter_flags Bitmask that shows what will be changed
|
|
858 |
||
859 |
@retval 0 OK
|
|
860 |
@retval error error code passed from storage engine
|
|
861 |
||
862 |
@note
|
|
863 |
If check_if_supported_alter returns HA_ALTER_SUPPORTED_WAIT_LOCK
|
|
864 |
this call is to be wrapped with a DDL lock. This is currently NOT
|
|
865 |
supported.
|
|
866 |
*/
|
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
867 |
virtual int alter_table_phase2(Session *session __attribute__((unused)), |
327.1.5
by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h |
868 |
Table *altered_table __attribute__((unused)), |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
869 |
HA_CREATE_INFO *create_info __attribute__((unused)), |
870 |
HA_ALTER_INFO *alter_info __attribute__((unused)), |
|
871 |
HA_ALTER_FLAGS *alter_flags __attribute__((unused))) |
|
1
by brian
clean slate |
872 |
{
|
873 |
return HA_ERR_UNSUPPORTED; |
|
874 |
}
|
|
875 |
/**
|
|
876 |
Tell storage engine that changed frm file is now on disk and table
|
|
877 |
has been re-opened (post-alter)
|
|
878 |
||
520.1.22
by Brian Aker
Second pass of thd cleanup |
879 |
@param session The thread handle
|
1
by brian
clean slate |
880 |
@param table The altered table, re-opened
|
881 |
*/
|
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
882 |
virtual int alter_table_phase3(Session *session __attribute__((unused)), |
327.1.5
by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h |
883 |
Table *table __attribute__((unused))) |
1
by brian
clean slate |
884 |
{
|
885 |
return HA_ERR_UNSUPPORTED; |
|
886 |
}
|
|
887 |
||
888 |
/**
|
|
889 |
use_hidden_primary_key() is called in case of an update/delete when
|
|
890 |
(table_flags() and HA_PRIMARY_KEY_REQUIRED_FOR_DELETE) is defined
|
|
891 |
but we don't have a primary key
|
|
892 |
*/
|
|
893 |
virtual void use_hidden_primary_key(); |
|
894 |
||
895 |
/**
|
|
896 |
Lock table.
|
|
897 |
||
520.1.22
by Brian Aker
Second pass of thd cleanup |
898 |
@param session Thread handle
|
1
by brian
clean slate |
899 |
@param lock_type HA_LOCK_IN_SHARE_MODE (F_RDLCK)
|
900 |
HA_LOCK_IN_EXCLUSIVE_MODE (F_WRLCK)
|
|
901 |
@param lock_timeout -1 default timeout
|
|
902 |
0 no wait
|
|
903 |
>0 wait timeout in milliseconds.
|
|
904 |
||
905 |
@note
|
|
906 |
lock_timeout >0 is not used by MySQL currently. If the storage
|
|
907 |
engine does not support NOWAIT (lock_timeout == 0) it should
|
|
908 |
return an error. But if it does not support WAIT X (lock_timeout
|
|
909 |
>0) it should treat it as lock_timeout == -1 and wait a default
|
|
910 |
(or even hard-coded) timeout.
|
|
911 |
||
912 |
@retval HA_ERR_WRONG_COMMAND Storage engine does not support
|
|
913 |
lock_table()
|
|
914 |
@retval HA_ERR_UNSUPPORTED Storage engine does not support NOWAIT
|
|
915 |
@retval HA_ERR_LOCK_WAIT_TIMEOUT Lock request timed out or
|
|
916 |
lock conflict with NOWAIT option
|
|
917 |
@retval HA_ERR_LOCK_DEADLOCK Deadlock detected
|
|
918 |
*/
|
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
919 |
virtual int lock_table(Session *session __attribute__((unused)), |
1
by brian
clean slate |
920 |
int lock_type __attribute__((unused)), |
921 |
int lock_timeout __attribute__((unused))) |
|
922 |
{
|
|
923 |
return HA_ERR_WRONG_COMMAND; |
|
924 |
}
|
|
383.7.1
by Andrey Zhakov
Initial submit of code and tests |
925 |
/*
|
926 |
This procedure defines if the storage engine supports virtual columns.
|
|
927 |
Default false means "not supported".
|
|
928 |
*/
|
|
929 |
virtual bool check_if_supported_virtual_columns(void) |
|
930 |
{ return false; } |
|
1
by brian
clean slate |
931 |
|
932 |
protected: |
|
933 |
/* Service methods for use by storage engines. */
|
|
934 |
void ha_statistic_increment(ulong SSV::*offset) const; |
|
520.1.21
by Brian Aker
THD -> Session rename |
935 |
void **ha_data(Session *) const; |
520.1.22
by Brian Aker
Second pass of thd cleanup |
936 |
Session *ha_session(void) const; |
1
by brian
clean slate |
937 |
|
938 |
/**
|
|
939 |
Default rename_table() and delete_table() rename/delete files with a
|
|
940 |
given name and extensions from bas_ext().
|
|
941 |
||
942 |
These methods can be overridden, but their default implementation
|
|
943 |
provide useful functionality.
|
|
944 |
*/
|
|
945 |
virtual int rename_table(const char *from, const char *to); |
|
946 |
/**
|
|
947 |
Delete a table in the engine. Called for base as well as temporary
|
|
948 |
tables.
|
|
949 |
*/
|
|
950 |
virtual int delete_table(const char *name); |
|
951 |
||
952 |
private: |
|
953 |
/* Private helpers */
|
|
954 |
inline void mark_trx_read_write(); |
|
955 |
private: |
|
956 |
/*
|
|
957 |
Low-level primitives for storage engines. These should be
|
|
958 |
overridden by the storage engine class. To call these methods, use
|
|
959 |
the corresponding 'ha_*' method above.
|
|
960 |
*/
|
|
961 |
||
482
by Brian Aker
Remove uint. |
962 |
virtual int open(const char *name, int mode, uint32_t test_if_locked)=0; |
963 |
virtual int index_init(uint32_t idx, |
|
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
964 |
bool sorted __attribute__((unused))) |
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
965 |
{ active_index= idx; return 0; } |
1
by brian
clean slate |
966 |
virtual int index_end() { active_index= MAX_KEY; return 0; } |
967 |
/**
|
|
968 |
rnd_init() can be called two times without rnd_end() in between
|
|
969 |
(it only makes sense if scan=1).
|
|
970 |
then the second call should prepare for the new table scan (e.g
|
|
971 |
if rnd_init allocates the cursor, second call should position it
|
|
972 |
to the start of the table, no need to deallocate and allocate it again
|
|
973 |
*/
|
|
974 |
virtual int rnd_init(bool scan)= 0; |
|
975 |
virtual int rnd_end() { return 0; } |
|
481
by Brian Aker
Remove all of uchar. |
976 |
virtual int write_row(unsigned char *buf __attribute__((unused))) |
977 |
{
|
|
978 |
return HA_ERR_WRONG_COMMAND; |
|
979 |
}
|
|
980 |
||
981 |
virtual int update_row(const unsigned char *old_data __attribute__((unused)), |
|
982 |
unsigned char *new_data __attribute__((unused))) |
|
983 |
{
|
|
984 |
return HA_ERR_WRONG_COMMAND; |
|
985 |
}
|
|
986 |
||
987 |
virtual int delete_row(const unsigned char *buf __attribute__((unused))) |
|
1
by brian
clean slate |
988 |
{
|
989 |
return HA_ERR_WRONG_COMMAND; |
|
990 |
}
|
|
991 |
/**
|
|
992 |
Reset state of file to after 'open'.
|
|
993 |
This function is called after every statement for all tables used
|
|
994 |
by that statement.
|
|
995 |
*/
|
|
996 |
virtual int reset() { return 0; } |
|
997 |
virtual Table_flags table_flags(void) const= 0; |
|
998 |
||
999 |
/**
|
|
1000 |
Is not invoked for non-transactional temporary tables.
|
|
1001 |
||
1002 |
Tells the storage engine that we intend to read or write data
|
|
1003 |
from the table. This call is prefixed with a call to handler::store_lock()
|
|
1004 |
and is invoked only for those handler instances that stored the lock.
|
|
1005 |
||
1006 |
Calls to rnd_init/index_init are prefixed with this call. When table
|
|
1007 |
IO is complete, we call external_lock(F_UNLCK).
|
|
1008 |
A storage engine writer should expect that each call to
|
|
1009 |
::external_lock(F_[RD|WR]LOCK is followed by a call to
|
|
1010 |
::external_lock(F_UNLCK). If it is not, it is a bug in MySQL.
|
|
1011 |
||
1012 |
The name and signature originate from the first implementation
|
|
1013 |
in MyISAM, which would call fcntl to set/clear an advisory
|
|
1014 |
lock on the data file in this method.
|
|
1015 |
||
1016 |
@param lock_type F_RDLCK, F_WRLCK, F_UNLCK
|
|
1017 |
||
1018 |
@return non-0 in case of failure, 0 in case of success.
|
|
1019 |
When lock_type is F_UNLCK, the return value is ignored.
|
|
1020 |
*/
|
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
1021 |
virtual int external_lock(Session *session __attribute__((unused)), |
1
by brian
clean slate |
1022 |
int lock_type __attribute__((unused))) |
1023 |
{
|
|
1024 |
return 0; |
|
1025 |
}
|
|
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
1026 |
virtual void release_auto_increment(void) { return; }; |
1
by brian
clean slate |
1027 |
/** admin commands - called from mysql_admin_table */
|
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
1028 |
virtual int check_for_upgrade(HA_CHECK_OPT *check_opt __attribute__((unused))) |
1
by brian
clean slate |
1029 |
{ return 0; } |
520.1.22
by Brian Aker
Second pass of thd cleanup |
1030 |
virtual int check(Session* session __attribute__((unused)), |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
1031 |
HA_CHECK_OPT* check_opt __attribute__((unused))) |
1
by brian
clean slate |
1032 |
{ return HA_ADMIN_NOT_IMPLEMENTED; } |
1033 |
||
1034 |
/**
|
|
1035 |
In this method check_opt can be modified
|
|
1036 |
to specify CHECK option to use to call check()
|
|
1037 |
upon the table.
|
|
1038 |
*/
|
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
1039 |
virtual int repair(Session* session __attribute__((unused)), |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
1040 |
HA_CHECK_OPT* check_opt __attribute__((unused))) |
1
by brian
clean slate |
1041 |
{ return HA_ADMIN_NOT_IMPLEMENTED; } |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
1042 |
virtual void start_bulk_insert(ha_rows rows __attribute__((unused))) |
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
1043 |
{}
|
1044 |
virtual int end_bulk_insert(void) { return 0; } |
|
481
by Brian Aker
Remove all of uchar. |
1045 |
virtual int index_read(unsigned char * buf __attribute__((unused)), |
1046 |
const unsigned char * key __attribute__((unused)), |
|
482
by Brian Aker
Remove uint. |
1047 |
uint32_t key_len __attribute__((unused)), |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
1048 |
enum ha_rkey_function find_flag __attribute__((unused))) |
1
by brian
clean slate |
1049 |
{ return HA_ERR_WRONG_COMMAND; } |
481
by Brian Aker
Remove all of uchar. |
1050 |
virtual int index_read_last(unsigned char * buf __attribute__((unused)), |
1051 |
const unsigned char * key __attribute__((unused)), |
|
482
by Brian Aker
Remove uint. |
1052 |
uint32_t key_len __attribute__((unused))) |
1
by brian
clean slate |
1053 |
{ return (my_errno= HA_ERR_WRONG_COMMAND); } |
1054 |
/**
|
|
1055 |
This method is similar to update_row, however the handler doesn't need
|
|
1056 |
to execute the updates at this point in time. The handler can be certain
|
|
1057 |
that another call to bulk_update_row will occur OR a call to
|
|
1058 |
exec_bulk_update before the set of updates in this query is concluded.
|
|
1059 |
||
1060 |
@param old_data Old record
|
|
1061 |
@param new_data New record
|
|
1062 |
@param dup_key_found Number of duplicate keys found
|
|
1063 |
||
1064 |
@retval 0 Bulk delete used by handler
|
|
1065 |
@retval 1 Bulk delete not used, normal operation used
|
|
1066 |
*/
|
|
481
by Brian Aker
Remove all of uchar. |
1067 |
virtual int bulk_update_row(const unsigned char *old_data __attribute__((unused)), |
1068 |
unsigned char *new_data __attribute__((unused)), |
|
482
by Brian Aker
Remove uint. |
1069 |
uint32_t *dup_key_found __attribute__((unused))) |
1
by brian
clean slate |
1070 |
{
|
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
1071 |
assert(false); |
1
by brian
clean slate |
1072 |
return HA_ERR_WRONG_COMMAND; |
1073 |
}
|
|
1074 |
/**
|
|
1075 |
This is called to delete all rows in a table
|
|
1076 |
If the handler don't support this, then this function will
|
|
1077 |
return HA_ERR_WRONG_COMMAND and MySQL will delete the rows one
|
|
1078 |
by one.
|
|
1079 |
*/
|
|
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
1080 |
virtual int delete_all_rows(void) |
1
by brian
clean slate |
1081 |
{ return (my_errno=HA_ERR_WRONG_COMMAND); } |
1082 |
/**
|
|
1083 |
Reset the auto-increment counter to the given value, i.e. the next row
|
|
1084 |
inserted will get the given value. This is called e.g. after TRUNCATE
|
|
1085 |
is emulated by doing a 'DELETE FROM t'. HA_ERR_WRONG_COMMAND is
|
|
1086 |
returned by storage engines that don't support this operation.
|
|
1087 |
*/
|
|
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
1088 |
virtual int reset_auto_increment(uint64_t value __attribute__((unused))) |
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
1089 |
{ return HA_ERR_WRONG_COMMAND; } |
520.1.22
by Brian Aker
Second pass of thd cleanup |
1090 |
virtual int optimize(Session* session __attribute__((unused)), |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
1091 |
HA_CHECK_OPT* check_opt __attribute__((unused))) |
1092 |
{ return HA_ADMIN_NOT_IMPLEMENTED; } |
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
1093 |
virtual int analyze(Session* session __attribute__((unused)), |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
1094 |
HA_CHECK_OPT* check_opt __attribute__((unused))) |
1095 |
{ return HA_ADMIN_NOT_IMPLEMENTED; } |
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
1096 |
virtual bool check_and_repair(Session *session __attribute__((unused))) |
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
1097 |
{ return true; } |
482
by Brian Aker
Remove uint. |
1098 |
virtual int disable_indexes(uint32_t mode __attribute__((unused))) |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
1099 |
{ return HA_ERR_WRONG_COMMAND; } |
482
by Brian Aker
Remove uint. |
1100 |
virtual int enable_indexes(uint32_t mode __attribute__((unused))) |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
1101 |
{ return HA_ERR_WRONG_COMMAND; } |
1102 |
virtual int discard_or_import_tablespace(bool discard __attribute__((unused))) |
|
1
by brian
clean slate |
1103 |
{ return (my_errno=HA_ERR_WRONG_COMMAND); } |
53.2.32
by Monty Taylor
First large swath at getting handler stuff clean. |
1104 |
virtual void prepare_for_alter(void) { return; } |
1
by brian
clean slate |
1105 |
virtual void drop_table(const char *name); |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
1106 |
virtual int create(const char *name __attribute__((unused)), |
327.1.5
by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h |
1107 |
Table *form __attribute__((unused)), |
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
1108 |
HA_CREATE_INFO *info __attribute__((unused)))=0; |
1
by brian
clean slate |
1109 |
|
212.1.3
by Monty Taylor
Renamed __attribute__((__unused__)) to __attribute__((unused)). |
1110 |
virtual int create_handler_files(const char *name __attribute__((unused)), |
1111 |
const char *old_name __attribute__((unused)), |
|
1112 |
int action_flag __attribute__((unused)), |
|
1113 |
HA_CREATE_INFO *info __attribute__((unused))) |
|
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
1114 |
{ return false; } |
1
by brian
clean slate |
1115 |
};
|
1116 |
||
1117 |
||
1118 |
||
1119 |
/**
|
|
1120 |
A Disk-Sweep MRR interface implementation
|
|
1121 |
||
1122 |
This implementation makes range (and, in the future, 'ref') scans to read
|
|
1123 |
table rows in disk sweeps.
|
|
1124 |
|
|
1125 |
Currently it is used by MyISAM and InnoDB. Potentially it can be used with
|
|
1126 |
any table handler that has non-clustered indexes and on-disk rows.
|
|
1127 |
*/
|
|
1128 |
||
1129 |
class DsMrr_impl |
|
1130 |
{
|
|
1131 |
public: |
|
1132 |
typedef void (handler::*range_check_toggle_func_t)(bool on); |
|
1133 |
||
1134 |
DsMrr_impl() |
|
1135 |
: h2(NULL) {}; |
|
1136 |
||
1137 |
handler *h; /* The "owner" handler object. It is used for scanning the index */ |
|
327.1.5
by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h |
1138 |
Table *table; /* Always equal to h->table */ |
1
by brian
clean slate |
1139 |
private: |
1140 |
/*
|
|
1141 |
Secondary handler object. It is used to retrieve full table rows by
|
|
1142 |
calling rnd_pos().
|
|
1143 |
*/
|
|
1144 |
handler *h2; |
|
1145 |
||
1146 |
/* Buffer to store rowids, or (rowid, range_id) pairs */
|
|
481
by Brian Aker
Remove all of uchar. |
1147 |
unsigned char *rowids_buf; |
1148 |
unsigned char *rowids_buf_cur; /* Current position when reading/writing */ |
|
1149 |
unsigned char *rowids_buf_last; /* When reading: end of used buffer space */ |
|
1150 |
unsigned char *rowids_buf_end; /* End of the buffer */ |
|
1
by brian
clean slate |
1151 |
|
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
1152 |
bool dsmrr_eof; /* true <=> We have reached EOF when reading index tuples */ |
1
by brian
clean slate |
1153 |
|
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
1154 |
/* true <=> need range association, buffer holds {rowid, range_id} pairs */
|
1
by brian
clean slate |
1155 |
bool is_mrr_assoc; |
1156 |
||
51.1.77
by Jay Pipes
Standardized TRUE/FALSE, removed/replaced DBUG symbols |
1157 |
bool use_default_impl; /* true <=> shortcut all calls to default MRR impl */ |
1
by brian
clean slate |
1158 |
public: |
327.1.5
by Brian Aker
Refactor around classes. TABLE_LIST has been factored out of table.h |
1159 |
void init(handler *h_arg, Table *table_arg) |
1
by brian
clean slate |
1160 |
{
|
1161 |
h= h_arg; |
|
1162 |
table= table_arg; |
|
1163 |
}
|
|
1164 |
int dsmrr_init(handler *h, KEY *key, RANGE_SEQ_IF *seq_funcs, |
|
482
by Brian Aker
Remove uint. |
1165 |
void *seq_init_param, uint32_t n_ranges, uint32_t mode, |
1
by brian
clean slate |
1166 |
HANDLER_BUFFER *buf); |
1167 |
void dsmrr_close(); |
|
1168 |
int dsmrr_fill_buffer(handler *h); |
|
1169 |
int dsmrr_next(handler *h, char **range_info); |
|
1170 |
||
482
by Brian Aker
Remove uint. |
1171 |
int dsmrr_info(uint32_t keyno, uint32_t n_ranges, uint32_t keys, uint32_t *bufsz, |
1172 |
uint32_t *flags, COST_VECT *cost); |
|
1
by brian
clean slate |
1173 |
|
482
by Brian Aker
Remove uint. |
1174 |
ha_rows dsmrr_info_const(uint32_t keyno, RANGE_SEQ_IF *seq, |
1175 |
void *seq_init_param, uint32_t n_ranges, uint32_t *bufsz, |
|
1176 |
uint32_t *flags, COST_VECT *cost); |
|
1
by brian
clean slate |
1177 |
private: |
482
by Brian Aker
Remove uint. |
1178 |
bool key_uses_partial_cols(uint32_t keyno); |
1179 |
bool choose_mrr_impl(uint32_t keyno, ha_rows rows, uint32_t *flags, uint32_t *bufsz, |
|
1
by brian
clean slate |
1180 |
COST_VECT *cost); |
482
by Brian Aker
Remove uint. |
1181 |
bool get_disk_sweep_mrr_cost(uint32_t keynr, ha_rows rows, uint32_t flags, |
1182 |
uint32_t *buffer_size, COST_VECT *cost); |
|
1
by brian
clean slate |
1183 |
};
|
1184 |
||
1185 |
extern const char *ha_row_type[]; |
|
1186 |
extern const char *tx_isolation_names[]; |
|
1187 |
extern const char *binlog_format_names[]; |
|
1188 |
extern TYPELIB tx_isolation_typelib; |
|
1189 |
extern TYPELIB myisam_stats_method_typelib; |
|
61
by Brian Aker
Conversion of handler type. |
1190 |
extern uint32_t total_ha, total_ha_2pc; |
1
by brian
clean slate |
1191 |
|
1192 |
/* Wrapper functions */
|
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
1193 |
#define ha_commit(session) (ha_commit_trans((session), true))
|
1194 |
#define ha_rollback(session) (ha_rollback_trans((session), true))
|
|
1
by brian
clean slate |
1195 |
|
1196 |
/* basic stuff */
|
|
1197 |
int ha_init_errors(void); |
|
1198 |
int ha_init(void); |
|
1199 |
int ha_end(void); |
|
1200 |
int ha_initialize_handlerton(st_plugin_int *plugin); |
|
1201 |
int ha_finalize_handlerton(st_plugin_int *plugin); |
|
1202 |
||
1203 |
TYPELIB *ha_known_exts(void); |
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
1204 |
void ha_close_connection(Session* session); |
1
by brian
clean slate |
1205 |
bool ha_flush_logs(handlerton *db_type); |
1206 |
void ha_drop_database(char* path); |
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
1207 |
int ha_create_table(Session *session, const char *path, |
1
by brian
clean slate |
1208 |
const char *db, const char *table_name, |
1209 |
HA_CREATE_INFO *create_info, |
|
1210 |
bool update_create_info); |
|
590.1.7
by Stewart Smith
remove mysql_frm_type |
1211 |
int ha_delete_table(Session *session, const char *path, |
1
by brian
clean slate |
1212 |
const char *db, const char *alias, bool generate_warning); |
1213 |
||
1214 |
/* statistics and info */
|
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
1215 |
bool ha_show_status(Session *session, handlerton *db_type, enum ha_stat_type stat); |
1
by brian
clean slate |
1216 |
|
1217 |
/* discovery */
|
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
1218 |
int ha_create_table_from_engine(Session* session, const char *db, const char *name); |
1219 |
int ha_discover(Session* session, const char* dbname, const char* name, |
|
481
by Brian Aker
Remove all of uchar. |
1220 |
unsigned char** frmblob, size_t* frmlen); |
520.1.22
by Brian Aker
Second pass of thd cleanup |
1221 |
int ha_find_files(Session *session,const char *db,const char *path, |
1
by brian
clean slate |
1222 |
const char *wild, bool dir, List<LEX_STRING>* files); |
520.1.22
by Brian Aker
Second pass of thd cleanup |
1223 |
int ha_table_exists_in_engine(Session* session, const char* db, const char* name); |
1
by brian
clean slate |
1224 |
|
1225 |
/* key cache */
|
|
1226 |
extern "C" int ha_init_key_cache(const char *name, KEY_CACHE *key_cache); |
|
1227 |
int ha_resize_key_cache(KEY_CACHE *key_cache); |
|
1228 |
int ha_change_key_cache_param(KEY_CACHE *key_cache); |
|
1229 |
int ha_change_key_cache(KEY_CACHE *old_key_cache, KEY_CACHE *new_key_cache); |
|
1230 |
int ha_end_key_cache(KEY_CACHE *key_cache); |
|
1231 |
||
1232 |
/* report to InnoDB that control passes to the client */
|
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
1233 |
int ha_release_temporary_latches(Session *session); |
1
by brian
clean slate |
1234 |
|
1235 |
/* transactions: interface to handlerton functions */
|
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
1236 |
int ha_start_consistent_snapshot(Session *session); |
1
by brian
clean slate |
1237 |
int ha_commit_or_rollback_by_xid(XID *xid, bool commit); |
520.1.22
by Brian Aker
Second pass of thd cleanup |
1238 |
int ha_commit_one_phase(Session *session, bool all); |
1239 |
int ha_rollback_trans(Session *session, bool all); |
|
1240 |
int ha_prepare(Session *session); |
|
1
by brian
clean slate |
1241 |
int ha_recover(HASH *commit_list); |
1242 |
||
1243 |
/* transactions: these functions never call handlerton functions directly */
|
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
1244 |
int ha_commit_trans(Session *session, bool all); |
1245 |
int ha_autocommit_or_rollback(Session *session, int error); |
|
1246 |
int ha_enable_transaction(Session *session, bool on); |
|
1
by brian
clean slate |
1247 |
|
1248 |
/* savepoints */
|
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
1249 |
int ha_rollback_to_savepoint(Session *session, SAVEPOINT *sv); |
1250 |
int ha_savepoint(Session *session, SAVEPOINT *sv); |
|
1251 |
int ha_release_savepoint(Session *session, SAVEPOINT *sv); |
|
1
by brian
clean slate |
1252 |
|
1253 |
/* these are called by storage engines */
|
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
1254 |
void trans_register_ha(Session *session, bool all, handlerton *ht); |
1
by brian
clean slate |
1255 |
|
520.6.7
by Monty Taylor
Moved a bunch of crap out of common_includes. |
1256 |
void table_case_convert(char * name, uint32_t length); |
1257 |
const char *table_case_name(HA_CREATE_INFO *info, const char *name); |
|
1258 |
||
1259 |
extern char reg_ext[FN_EXTLEN]; |
|
1260 |
extern uint32_t reg_ext_length; |
|
1261 |
extern ulong specialflag; |
|
1262 |
extern uint32_t lower_case_table_names; |
|
1263 |
uint32_t filename_to_tablename(const char *from, char *to, uint32_t to_length); |
|
1264 |
uint32_t tablename_to_filename(const char *from, char *to, uint32_t to_length); |
|
1265 |
||
1266 |
||
575.1.3
by Monty Taylor
Moved some stuff out of handler.h. |
1267 |
bool mysql_ha_open(Session *session, TableList *tables, bool reopen); |
1268 |
bool mysql_ha_close(Session *session, TableList *tables); |
|
1269 |
bool mysql_ha_read(Session *, TableList *,enum enum_ha_read_modes,char *, |
|
1270 |
List<Item> *,enum ha_rkey_function,Item *,ha_rows,ha_rows); |
|
1271 |
void mysql_ha_flush(Session *session); |
|
1272 |
void mysql_ha_rm_tables(Session *session, TableList *tables, bool is_locked); |
|
1273 |
void mysql_ha_cleanup(Session *session); |
|
1274 |
||
1
by brian
clean slate |
1275 |
/*
|
1276 |
Storage engine has to assume the transaction will end up with 2pc if
|
|
1277 |
- there is more than one 2pc-capable storage engine available
|
|
1278 |
- in the current transaction 2pc was not disabled yet
|
|
1279 |
*/
|
|
520.1.22
by Brian Aker
Second pass of thd cleanup |
1280 |
#define trans_need_2pc(session, all) ((total_ha_2pc > 1) && \
|
1281 |
!((all ? &session->transaction.all : &session->transaction.stmt)->no_2pc))
|
|
520.6.4
by Monty Taylor
Moved thr_lock.h out of common_includes. |
1282 |
|
575.4.7
by Monty Taylor
More header cleanup. |
1283 |
|
1284 |
bool mysql_xa_recover(Session *session); |
|
1285 |
||
1286 |
SORT_FIELD * make_unireg_sortorder(order_st *order, uint32_t *length, |
|
1287 |
SORT_FIELD *sortorder); |
|
1288 |
int setup_order(Session *session, Item **ref_pointer_array, TableList *tables, |
|
1289 |
List<Item> &fields, List <Item> &all_fields, order_st *order); |
|
1290 |
int setup_group(Session *session, Item **ref_pointer_array, TableList *tables, |
|
1291 |
List<Item> &fields, List<Item> &all_fields, order_st *order, |
|
1292 |
bool *hidden_group_fields); |
|
1293 |
bool fix_inner_refs(Session *session, List<Item> &all_fields, SELECT_LEX *select, |
|
1294 |
Item **ref_pointer_array); |
|
1295 |
||
1296 |
bool handle_select(Session *session, LEX *lex, select_result *result, |
|
1297 |
ulong setup_tables_done_option); |
|
1298 |
bool mysql_select(Session *session, Item ***rref_pointer_array, |
|
1299 |
TableList *tables, uint32_t wild_num, List<Item> &list, |
|
1300 |
COND *conds, uint32_t og_num, order_st *order, order_st *group, |
|
1301 |
Item *having, order_st *proc_param, uint64_t select_type, |
|
1302 |
select_result *result, SELECT_LEX_UNIT *unit, |
|
1303 |
SELECT_LEX *select_lex); |
|
1304 |
void free_underlaid_joins(Session *session, SELECT_LEX *select); |
|
1305 |
bool mysql_explain_union(Session *session, SELECT_LEX_UNIT *unit, |
|
1306 |
select_result *result); |
|
1307 |
int mysql_explain_select(Session *session, SELECT_LEX *sl, char const *type, |
|
1308 |
select_result *result); |
|
1309 |
bool mysql_union(Session *session, LEX *lex, select_result *result, |
|
1310 |
SELECT_LEX_UNIT *unit, ulong setup_tables_done_option); |
|
1311 |
bool mysql_handle_derived(LEX *lex, bool (*processor)(Session *session, |
|
1312 |
LEX *lex, |
|
1313 |
TableList *table)); |
|
1314 |
bool mysql_derived_prepare(Session *session, LEX *lex, TableList *t); |
|
1315 |
bool mysql_derived_filling(Session *session, LEX *lex, TableList *t); |
|
1316 |
void sp_prepare_create_field(Session *session, Create_field *sql_field); |
|
1317 |
int prepare_create_field(Create_field *sql_field, |
|
1318 |
uint32_t *blob_columns, |
|
1319 |
int *timestamps, int *timestamps_with_niladic, |
|
1320 |
int64_t table_flags); |
|
1321 |
bool mysql_create_table(Session *session,const char *db, const char *table_name, |
|
1322 |
HA_CREATE_INFO *create_info, |
|
1323 |
Alter_info *alter_info, |
|
1324 |
bool tmp_table, uint32_t select_field_count); |
|
1325 |
bool mysql_create_table_no_lock(Session *session, const char *db, |
|
1326 |
const char *table_name, |
|
1327 |
HA_CREATE_INFO *create_info, |
|
1328 |
Alter_info *alter_info, |
|
1329 |
bool tmp_table, uint32_t select_field_count, |
|
1330 |
bool lock_open_lock); |
|
1331 |
||
1332 |
bool mysql_alter_table(Session *session, char *new_db, char *new_name, |
|
1333 |
HA_CREATE_INFO *create_info, |
|
1334 |
TableList *table_list, |
|
1335 |
Alter_info *alter_info, |
|
1336 |
uint32_t order_num, order_st *order, bool ignore); |
|
1337 |
bool mysql_recreate_table(Session *session, TableList *table_list); |
|
1338 |
bool mysql_create_like_table(Session *session, TableList *table, |
|
1339 |
TableList *src_table, |
|
1340 |
HA_CREATE_INFO *create_info); |
|
1341 |
bool mysql_rename_table(handlerton *base, const char *old_db, |
|
1342 |
const char * old_name, const char *new_db, |
|
1343 |
const char * new_name, uint32_t flags); |
|
1344 |
bool mysql_prepare_update(Session *session, TableList *table_list, |
|
1345 |
Item **conds, uint32_t order_num, order_st *order); |
|
1346 |
int mysql_update(Session *session,TableList *tables,List<Item> &fields, |
|
1347 |
List<Item> &values,COND *conds, |
|
1348 |
uint32_t order_num, order_st *order, ha_rows limit, |
|
1349 |
enum enum_duplicates handle_duplicates, bool ignore); |
|
1350 |
bool mysql_multi_update(Session *session, TableList *table_list, |
|
1351 |
List<Item> *fields, List<Item> *values, |
|
1352 |
COND *conds, uint64_t options, |
|
1353 |
enum enum_duplicates handle_duplicates, bool ignore, |
|
1354 |
SELECT_LEX_UNIT *unit, SELECT_LEX *select_lex); |
|
1355 |
bool mysql_prepare_insert(Session *session, TableList *table_list, Table *table, |
|
1356 |
List<Item> &fields, List_item *values, |
|
1357 |
List<Item> &update_fields, |
|
1358 |
List<Item> &update_values, enum_duplicates duplic, |
|
1359 |
COND **where, bool select_insert, |
|
1360 |
bool check_fields, bool abort_on_warning); |
|
1361 |
bool mysql_insert(Session *session,TableList *table,List<Item> &fields, |
|
1362 |
List<List_item> &values, List<Item> &update_fields, |
|
1363 |
List<Item> &update_values, enum_duplicates flag, |
|
1364 |
bool ignore); |
|
1365 |
int check_that_all_fields_are_given_values(Session *session, Table *entry, |
|
1366 |
TableList *table_list); |
|
1367 |
void prepare_triggers_for_insert_stmt(Table *table); |
|
1368 |
int mysql_prepare_delete(Session *session, TableList *table_list, Item **conds); |
|
1369 |
bool mysql_delete(Session *session, TableList *table_list, COND *conds, |
|
1370 |
SQL_LIST *order, ha_rows rows, uint64_t options, |
|
1371 |
bool reset_auto_increment); |
|
1372 |
bool mysql_truncate(Session *session, TableList *table_list, bool dont_send_ok); |
|
1373 |
uint32_t create_table_def_key(Session *session, char *key, TableList *table_list, |
|
1374 |
bool tmp_table); |
|
1375 |
TABLE_SHARE *get_table_share(Session *session, TableList *table_list, char *key, |
|
1376 |
uint32_t key_length, uint32_t db_flags, int *error); |
|
1377 |
void release_table_share(TABLE_SHARE *share, enum release_type type); |
|
1378 |
TABLE_SHARE *get_cached_table_share(const char *db, const char *table_name); |
|
1379 |
Table *open_ltable(Session *session, TableList *table_list, thr_lock_type update, |
|
1380 |
uint32_t lock_flags); |
|
1381 |
Table *open_table(Session *session, TableList *table_list, bool *refresh, uint32_t flags); |
|
1382 |
bool name_lock_locked_table(Session *session, TableList *tables); |
|
1383 |
bool reopen_name_locked_table(Session* session, TableList* table_list, bool link_in); |
|
1384 |
Table *table_cache_insert_placeholder(Session *session, const char *key, |
|
1385 |
uint32_t key_length); |
|
1386 |
bool lock_table_name_if_not_cached(Session *session, const char *db, |
|
1387 |
const char *table_name, Table **table); |
|
1388 |
Table *find_locked_table(Session *session, const char *db,const char *table_name); |
|
1389 |
void detach_merge_children(Table *table, bool clear_refs); |
|
1390 |
bool fix_merge_after_open(TableList *old_child_list, TableList **old_last, |
|
1391 |
TableList *new_child_list, TableList **new_last); |
|
1392 |
bool reopen_table(Table *table); |
|
1393 |
bool reopen_tables(Session *session,bool get_locks,bool in_refresh); |
|
1394 |
void close_data_files_and_morph_locks(Session *session, const char *db, |
|
1395 |
const char *table_name); |
|
1396 |
void close_handle_and_leave_table_as_lock(Table *table); |
|
1397 |
bool open_new_frm(Session *session, TABLE_SHARE *share, const char *alias, |
|
1398 |
uint32_t db_stat, uint32_t prgflag, |
|
1399 |
uint32_t ha_open_flags, Table *outparam, |
|
1400 |
TableList *table_desc, MEM_ROOT *mem_root); |
|
1401 |
bool wait_for_tables(Session *session); |
|
1402 |
bool table_is_used(Table *table, bool wait_for_name_lock); |
|
1403 |
Table *drop_locked_tables(Session *session,const char *db, const char *table_name); |
|
1404 |
void abort_locked_tables(Session *session,const char *db, const char *table_name); |
|
1405 |
void execute_init_command(Session *session, sys_var_str *init_command_var, |
|
1406 |
rw_lock_t *var_mutex); |
|
1407 |
extern Field *not_found_field; |
|
1408 |
extern Field *view_ref_found; |
|
1409 |
||
1410 |
Field * |
|
1411 |
find_field_in_tables(Session *session, Item_ident *item, |
|
1412 |
TableList *first_table, TableList *last_table, |
|
1413 |
Item **ref, find_item_error_report_type report_error, |
|
1414 |
bool check_privileges, bool register_tree_change); |
|
1415 |
Field * |
|
1416 |
find_field_in_table_ref(Session *session, TableList *table_list, |
|
1417 |
const char *name, uint32_t length, |
|
1418 |
const char *item_name, const char *db_name, |
|
1419 |
const char *table_name, Item **ref, |
|
1420 |
bool check_privileges, bool allow_rowid, |
|
1421 |
uint32_t *cached_field_index_ptr, |
|
1422 |
bool register_tree_change, TableList **actual_table); |
|
1423 |
Field * |
|
1424 |
find_field_in_table(Session *session, Table *table, const char *name, uint32_t length, |
|
1425 |
bool allow_rowid, uint32_t *cached_field_index_ptr); |
|
1426 |
Field * |
|
1427 |
find_field_in_table_sef(Table *table, const char *name); |
|
1428 |
int update_virtual_fields_marked_for_write(Table *table, |
|
1429 |
bool ignore_stored=true); |
|
1430 |
||
1431 |
||
520.6.4
by Monty Taylor
Moved thr_lock.h out of common_includes. |
1432 |
#endif /* DRIZZLED_HANDLER_H */ |