Sort class handler public declarations.
sql/handler.h: Collect ha_* wrappers and their virtual counterparts into two symmetrical groups. Previously they were scattered all over class handler declaration. That should ease maintenance and addition of new ha_ wrappers. When a new ha_* wrapper is added, it should be added to the end of the ha_* group. Its virtual counterpart should become private and be moved to the end of the hander class.
This commit is contained in:
parent
fba0a6dbed
commit
554599e854
241
sql/handler.h
241
sql/handler.h
@ -973,32 +973,12 @@ class handler :public Sql_alloc
|
||||
|
||||
public:
|
||||
typedef ulonglong Table_flags;
|
||||
|
||||
protected:
|
||||
protected:
|
||||
struct st_table_share *table_share; /* The table definition */
|
||||
struct st_table *table; /* The current open table */
|
||||
Table_flags cached_table_flags; /* Set on init() and open() */
|
||||
|
||||
virtual int index_init(uint idx, bool sorted) { active_index=idx; return 0; }
|
||||
virtual int index_end() { active_index=MAX_KEY; return 0; }
|
||||
/**
|
||||
rnd_init() can be called two times without rnd_end() in between
|
||||
(it only makes sense if scan=1).
|
||||
then the second call should prepare for the new table scan (e.g
|
||||
if rnd_init allocates the cursor, second call should position it
|
||||
to the start of the table, no need to deallocate and allocate it again
|
||||
*/
|
||||
virtual int rnd_init(bool scan) =0;
|
||||
virtual int rnd_end() { return 0; }
|
||||
virtual Table_flags table_flags(void) const =0;
|
||||
|
||||
void ha_statistic_increment(ulong SSV::*offset) const;
|
||||
void **ha_data(THD *) const;
|
||||
THD *ha_thd(void) const;
|
||||
|
||||
ha_rows estimation_rows_to_insert;
|
||||
virtual void start_bulk_insert(ha_rows rows) {}
|
||||
virtual int end_bulk_insert() {return 0; }
|
||||
public:
|
||||
handlerton *ht; /* storage engine of this handler */
|
||||
uchar *ref; /* Pointer to current row */
|
||||
@ -1071,7 +1051,74 @@ public:
|
||||
{
|
||||
cached_table_flags= table_flags();
|
||||
}
|
||||
/* ha_ methods: pubilc wrappers for private virtual API */
|
||||
|
||||
int ha_open(TABLE *table, const char *name, int mode, int test_if_locked);
|
||||
int ha_index_init(uint idx, bool sorted)
|
||||
{
|
||||
int result;
|
||||
DBUG_ENTER("ha_index_init");
|
||||
DBUG_ASSERT(inited==NONE);
|
||||
if (!(result= index_init(idx, sorted)))
|
||||
inited=INDEX;
|
||||
DBUG_RETURN(result);
|
||||
}
|
||||
int ha_index_end()
|
||||
{
|
||||
DBUG_ENTER("ha_index_end");
|
||||
DBUG_ASSERT(inited==INDEX);
|
||||
inited=NONE;
|
||||
DBUG_RETURN(index_end());
|
||||
}
|
||||
int ha_rnd_init(bool scan)
|
||||
{
|
||||
int result;
|
||||
DBUG_ENTER("ha_rnd_init");
|
||||
DBUG_ASSERT(inited==NONE || (inited==RND && scan));
|
||||
inited= (result= rnd_init(scan)) ? NONE: RND;
|
||||
DBUG_RETURN(result);
|
||||
}
|
||||
int ha_rnd_end()
|
||||
{
|
||||
DBUG_ENTER("ha_rnd_end");
|
||||
DBUG_ASSERT(inited==RND);
|
||||
inited=NONE;
|
||||
DBUG_RETURN(rnd_end());
|
||||
}
|
||||
int ha_reset();
|
||||
/* this is necessary in many places, e.g. in HANDLER command */
|
||||
int ha_index_or_rnd_end()
|
||||
{
|
||||
return inited == INDEX ? ha_index_end() : inited == RND ? ha_rnd_end() : 0;
|
||||
}
|
||||
Table_flags ha_table_flags() const { return cached_table_flags; }
|
||||
/**
|
||||
These functions represent the public interface to *users* of the
|
||||
handler class, hence they are *not* virtual. For the inheritance
|
||||
interface, see the (private) functions write_row(), update_row(),
|
||||
and delete_row() below.
|
||||
*/
|
||||
int ha_external_lock(THD *thd, int lock_type);
|
||||
int ha_write_row(uchar * buf);
|
||||
int ha_update_row(const uchar * old_data, uchar * new_data);
|
||||
int ha_delete_row(const uchar * buf);
|
||||
void ha_release_auto_increment();
|
||||
|
||||
int ha_check_for_upgrade(HA_CHECK_OPT *check_opt);
|
||||
/** to be actually called to get 'check()' functionality*/
|
||||
int ha_check(THD *thd, HA_CHECK_OPT *check_opt);
|
||||
int ha_repair(THD* thd, HA_CHECK_OPT* check_opt);
|
||||
void ha_start_bulk_insert(ha_rows rows)
|
||||
{
|
||||
estimation_rows_to_insert= rows;
|
||||
start_bulk_insert(rows);
|
||||
}
|
||||
int ha_end_bulk_insert()
|
||||
{
|
||||
estimation_rows_to_insert= 0;
|
||||
return end_bulk_insert();
|
||||
}
|
||||
|
||||
void adjust_next_insert_id_after_explicit_value(ulonglong nr);
|
||||
int update_auto_increment();
|
||||
void print_keydup_error(uint key_nr, const char *msg);
|
||||
@ -1134,45 +1181,6 @@ public:
|
||||
|
||||
virtual const char *index_type(uint key_number) { DBUG_ASSERT(0); return "";}
|
||||
|
||||
int ha_index_init(uint idx, bool sorted)
|
||||
{
|
||||
int result;
|
||||
DBUG_ENTER("ha_index_init");
|
||||
DBUG_ASSERT(inited==NONE);
|
||||
if (!(result= index_init(idx, sorted)))
|
||||
inited=INDEX;
|
||||
DBUG_RETURN(result);
|
||||
}
|
||||
int ha_index_end()
|
||||
{
|
||||
DBUG_ENTER("ha_index_end");
|
||||
DBUG_ASSERT(inited==INDEX);
|
||||
inited=NONE;
|
||||
DBUG_RETURN(index_end());
|
||||
}
|
||||
int ha_rnd_init(bool scan)
|
||||
{
|
||||
int result;
|
||||
DBUG_ENTER("ha_rnd_init");
|
||||
DBUG_ASSERT(inited==NONE || (inited==RND && scan));
|
||||
inited= (result= rnd_init(scan)) ? NONE: RND;
|
||||
DBUG_RETURN(result);
|
||||
}
|
||||
int ha_rnd_end()
|
||||
{
|
||||
DBUG_ENTER("ha_rnd_end");
|
||||
DBUG_ASSERT(inited==RND);
|
||||
inited=NONE;
|
||||
DBUG_RETURN(rnd_end());
|
||||
}
|
||||
int ha_reset();
|
||||
|
||||
/* this is necessary in many places, e.g. in HANDLER command */
|
||||
int ha_index_or_rnd_end()
|
||||
{
|
||||
return inited == INDEX ? ha_index_end() : inited == RND ? ha_rnd_end() : 0;
|
||||
}
|
||||
Table_flags ha_table_flags() const { return cached_table_flags; }
|
||||
|
||||
/**
|
||||
Signal that the table->read_set and table->write_set table maps changed
|
||||
@ -1183,20 +1191,8 @@ public:
|
||||
*/
|
||||
virtual void column_bitmaps_signal();
|
||||
uint get_index(void) const { return active_index; }
|
||||
virtual int open(const char *name, int mode, uint test_if_locked)=0;
|
||||
virtual int close(void)=0;
|
||||
|
||||
/**
|
||||
These functions represent the public interface to *users* of the
|
||||
handler class, hence they are *not* virtual. For the inheritance
|
||||
interface, see the (private) functions write_row(), update_row(),
|
||||
and delete_row() below.
|
||||
*/
|
||||
int ha_external_lock(THD *thd, int lock_type);
|
||||
int ha_write_row(uchar * buf);
|
||||
int ha_update_row(const uchar * old_data, uchar * new_data);
|
||||
int ha_delete_row(const uchar * buf);
|
||||
|
||||
/**
|
||||
@retval 0 Bulk update used by handler
|
||||
@retval 1 Bulk update not used, normal operation used
|
||||
@ -1258,11 +1254,6 @@ public:
|
||||
DBUG_ASSERT(FALSE);
|
||||
return HA_ERR_WRONG_COMMAND;
|
||||
}
|
||||
private:
|
||||
virtual int index_read(uchar * buf, const uchar * key, uint key_len,
|
||||
enum ha_rkey_function find_flag)
|
||||
{ return HA_ERR_WRONG_COMMAND; }
|
||||
public:
|
||||
/**
|
||||
@brief
|
||||
Positions an index cursor to the index specified in the handle. Fetches the
|
||||
@ -1294,10 +1285,6 @@ public:
|
||||
virtual int index_last(uchar * buf)
|
||||
{ return HA_ERR_WRONG_COMMAND; }
|
||||
virtual int index_next_same(uchar *buf, const uchar *key, uint keylen);
|
||||
private:
|
||||
virtual int index_read_last(uchar * buf, const uchar * key, uint key_len)
|
||||
{ return (my_errno=HA_ERR_WRONG_COMMAND); }
|
||||
public:
|
||||
/**
|
||||
@brief
|
||||
The following functions works like index_read, but it find the last
|
||||
@ -1356,12 +1343,6 @@ public:
|
||||
virtual int extra_opt(enum ha_extra_function operation, ulong cache_size)
|
||||
{ return extra(operation); }
|
||||
|
||||
/**
|
||||
Reset state of file to after 'open'.
|
||||
This function is called after every statement for all tables used
|
||||
by that statement.
|
||||
*/
|
||||
virtual int reset() { return 0; }
|
||||
/**
|
||||
In an UPDATE or DELETE, if the row under the cursor was locked by another
|
||||
transaction, and the engine used an optimistic read of the last
|
||||
@ -1396,10 +1377,6 @@ public:
|
||||
ulonglong nb_desired_values,
|
||||
ulonglong *first_value,
|
||||
ulonglong *nb_reserved_values);
|
||||
private:
|
||||
virtual void release_auto_increment() { return; };
|
||||
public:
|
||||
void ha_release_auto_increment();
|
||||
void set_next_insert_id(ulonglong id)
|
||||
{
|
||||
DBUG_PRINT("info",("auto_increment: next value %lu", (ulong)id));
|
||||
@ -1430,26 +1407,7 @@ public:
|
||||
{ return HA_ERR_WRONG_COMMAND; }
|
||||
|
||||
virtual void update_create_info(HA_CREATE_INFO *create_info) {}
|
||||
protected:
|
||||
/* to be implemented in handlers */
|
||||
|
||||
/** admin commands - called from mysql_admin_table */
|
||||
virtual int check(THD* thd, HA_CHECK_OPT* check_opt)
|
||||
{ return HA_ADMIN_NOT_IMPLEMENTED; }
|
||||
|
||||
/**
|
||||
In these two methods check_opt can be modified
|
||||
to specify CHECK option to use to call check()
|
||||
upon the table.
|
||||
*/
|
||||
virtual int check_for_upgrade(HA_CHECK_OPT *check_opt)
|
||||
{ return 0; }
|
||||
public:
|
||||
int ha_check_for_upgrade(HA_CHECK_OPT *check_opt);
|
||||
int check_old_types();
|
||||
/** to be actually called to get 'check()' functionality*/
|
||||
int ha_check(THD *thd, HA_CHECK_OPT *check_opt);
|
||||
|
||||
virtual int backup(THD* thd, HA_CHECK_OPT* check_opt)
|
||||
{ return HA_ADMIN_NOT_IMPLEMENTED; }
|
||||
/**
|
||||
@ -1458,11 +1416,6 @@ public:
|
||||
*/
|
||||
virtual int restore(THD* thd, HA_CHECK_OPT* check_opt)
|
||||
{ return HA_ADMIN_NOT_IMPLEMENTED; }
|
||||
protected:
|
||||
virtual int repair(THD* thd, HA_CHECK_OPT* check_opt)
|
||||
{ return HA_ADMIN_NOT_IMPLEMENTED; }
|
||||
public:
|
||||
int ha_repair(THD* thd, HA_CHECK_OPT* check_opt);
|
||||
virtual int optimize(THD* thd, HA_CHECK_OPT* check_opt)
|
||||
{ return HA_ADMIN_NOT_IMPLEMENTED; }
|
||||
virtual int analyze(THD* thd, HA_CHECK_OPT* check_opt)
|
||||
@ -1478,16 +1431,6 @@ public:
|
||||
virtual int disable_indexes(uint mode) { return HA_ERR_WRONG_COMMAND; }
|
||||
virtual int enable_indexes(uint mode) { return HA_ERR_WRONG_COMMAND; }
|
||||
virtual int indexes_are_disabled(void) {return 0;}
|
||||
void ha_start_bulk_insert(ha_rows rows)
|
||||
{
|
||||
estimation_rows_to_insert= rows;
|
||||
start_bulk_insert(rows);
|
||||
}
|
||||
int ha_end_bulk_insert()
|
||||
{
|
||||
estimation_rows_to_insert= 0;
|
||||
return end_bulk_insert();
|
||||
}
|
||||
virtual int discard_or_import_tablespace(my_bool discard)
|
||||
{return HA_ERR_WRONG_COMMAND;}
|
||||
virtual int net_read_dump(NET* net) { return HA_ERR_WRONG_COMMAND; }
|
||||
@ -1754,13 +1697,37 @@ public:
|
||||
*/
|
||||
virtual void use_hidden_primary_key();
|
||||
|
||||
protected:
|
||||
/* Service methods for use by storage engines. */
|
||||
void ha_statistic_increment(ulong SSV::*offset) const;
|
||||
void **ha_data(THD *) const;
|
||||
THD *ha_thd(void) const;
|
||||
private:
|
||||
/*
|
||||
Row-level primitives for storage engines. These should be
|
||||
Low-level primitives for storage engines. These should be
|
||||
overridden by the storage engine class. To call these methods, use
|
||||
the corresponding 'ha_*' method above.
|
||||
*/
|
||||
|
||||
virtual int open(const char *name, int mode, uint test_if_locked)=0;
|
||||
virtual int index_init(uint idx, bool sorted) { active_index= idx; return 0; }
|
||||
virtual int index_end() { active_index= MAX_KEY; return 0; }
|
||||
/**
|
||||
rnd_init() can be called two times without rnd_end() in between
|
||||
(it only makes sense if scan=1).
|
||||
then the second call should prepare for the new table scan (e.g
|
||||
if rnd_init allocates the cursor, second call should position it
|
||||
to the start of the table, no need to deallocate and allocate it again
|
||||
*/
|
||||
virtual int rnd_init(bool scan)= 0;
|
||||
virtual int rnd_end() { return 0; }
|
||||
/**
|
||||
Reset state of file to after 'open'.
|
||||
This function is called after every statement for all tables used
|
||||
by that statement.
|
||||
*/
|
||||
virtual int reset() { return 0; }
|
||||
virtual Table_flags table_flags(void) const= 0;
|
||||
/**
|
||||
Is not invoked for non-transactional temporary tables.
|
||||
|
||||
@ -1788,8 +1755,30 @@ private:
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
virtual void release_auto_increment() { return; };
|
||||
/** admin commands - called from mysql_admin_table */
|
||||
virtual int check_for_upgrade(HA_CHECK_OPT *check_opt)
|
||||
{ return 0; }
|
||||
virtual int check(THD* thd, HA_CHECK_OPT* check_opt)
|
||||
{ return HA_ADMIN_NOT_IMPLEMENTED; }
|
||||
|
||||
/**
|
||||
In this method check_opt can be modified
|
||||
to specify CHECK option to use to call check()
|
||||
upon the table.
|
||||
*/
|
||||
virtual int repair(THD* thd, HA_CHECK_OPT* check_opt)
|
||||
{ return HA_ADMIN_NOT_IMPLEMENTED; }
|
||||
virtual void start_bulk_insert(ha_rows rows) {}
|
||||
virtual int end_bulk_insert() { return 0; }
|
||||
virtual int index_read(uchar * buf, const uchar * key, uint key_len,
|
||||
enum ha_rkey_function find_flag)
|
||||
{ return HA_ERR_WRONG_COMMAND; }
|
||||
virtual int index_read_last(uchar * buf, const uchar * key, uint key_len)
|
||||
{ return (my_errno= HA_ERR_WRONG_COMMAND); }
|
||||
};
|
||||
|
||||
|
||||
/* Some extern variables used with handlers */
|
||||
|
||||
extern const char *ha_row_type[];
|
||||
|
Loading…
x
Reference in New Issue
Block a user