summaryrefslogtreecommitdiff
path: root/sql/ha_innodb.h
diff options
context:
space:
mode:
Diffstat (limited to 'sql/ha_innodb.h')
-rw-r--r--sql/ha_innodb.h215
1 files changed, 114 insertions, 101 deletions
diff --git a/sql/ha_innodb.h b/sql/ha_innodb.h
index 5dd6a92c4b0..4f0c9eb151b 100644
--- a/sql/ha_innodb.h
+++ b/sql/ha_innodb.h
@@ -7,12 +7,12 @@
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/*
This file is based on ha_berkeley.h of MySQL distribution
@@ -34,8 +34,8 @@ typedef struct st_innobase_share {
my_bool innobase_query_caching_of_table_permitted(THD* thd, char* full_name,
- uint full_name_len,
- ulonglong *unused);
+ uint full_name_len,
+ ulonglong *unused);
/* The class defining a handle to an Innodb table */
class ha_innobase: public handler
@@ -47,20 +47,20 @@ class ha_innobase: public handler
THD* user_thd; /* the thread handle of the user
currently using the handle; this is
set in external_lock function */
- query_id_t last_query_id; /* the latest query id where the
+ query_id_t last_query_id; /* the latest query id where the
handle was used */
- THR_LOCK_DATA lock;
- INNOBASE_SHARE *share;
+ THR_LOCK_DATA lock;
+ INNOBASE_SHARE *share;
- byte* upd_buff; /* buffer used in updates */
- byte* key_val_buff; /* buffer used in converting
- search key values from MySQL format
- to Innodb format */
+ byte* upd_buff; /* buffer used in updates */
+ byte* key_val_buff; /* buffer used in converting
+ search key values from MySQL format
+ to Innodb format */
ulong upd_and_key_val_buff_len;
/* the length of each of the previous
two buffers */
- ulong int_table_flags;
- uint primary_key;
+ ulong int_table_flags;
+ uint primary_key;
ulong start_of_scan; /* this is set to 1 when we are
starting a table scan but have not
yet fetched any row, else 0 */
@@ -70,7 +70,7 @@ class ha_innobase: public handler
uint num_write_row; /* number of write_row() calls */
uint store_key_val_for_row(uint keynr, char* buff, uint buff_len,
- const byte* record);
+ const byte* record);
int update_thd(THD* thd);
int change_active_index(uint keynr);
int general_fetch(byte* buf, uint direction, uint match_mode);
@@ -78,27 +78,27 @@ class ha_innobase: public handler
/* Init values for the class: */
public:
- ha_innobase(TABLE *table_arg);
- ~ha_innobase() {}
+ ha_innobase(TABLE_SHARE *table_arg);
+ ~ha_innobase() {}
/*
Get the row type from the storage engine. If this method returns
ROW_TYPE_NOT_USED, the information in HA_CREATE_INFO should be used.
*/
enum row_type get_row_type() const;
- const char* table_type() const { return("InnoDB");}
+ const char* table_type() const { return("InnoDB");}
const char *index_type(uint key_number) { return "BTREE"; }
- const char** bas_ext() const;
- ulong table_flags() const { return int_table_flags; }
+ const char** bas_ext() const;
+ ulong table_flags() const { return int_table_flags; }
ulong index_flags(uint idx, uint part, bool all_parts) const
{
return (HA_READ_NEXT |
HA_READ_PREV |
HA_READ_ORDER |
HA_READ_RANGE |
- HA_KEYREAD_ONLY);
+ HA_KEYREAD_ONLY);
}
- uint max_supported_keys() const { return MAX_KEY; }
+ uint max_supported_keys() const { return MAX_KEY; }
/* An InnoDB page must store >= 2 keys;
a secondary key record must also contain the
primary key value:
@@ -106,96 +106,111 @@ class ha_innobase: public handler
less than 1 / 4 of page size which is 16 kB;
but currently MySQL does not work with keys
whose size is > MAX_KEY_LENGTH */
- uint max_supported_key_length() const { return 3500; }
- uint max_supported_key_part_length() const;
+ uint max_supported_key_length() const { return 3500; }
+ uint max_supported_key_part_length() const;
const key_map *keys_to_use_for_scanning() { return &key_map_full; }
- bool has_transactions() { return 1;}
+ bool has_transactions() { return 1;}
- int open(const char *name, int mode, uint test_if_locked);
- int close(void);
- double scan_time();
+ int open(const char *name, int mode, uint test_if_locked);
+ int close(void);
+ double scan_time();
double read_time(uint index, uint ranges, ha_rows rows);
- int write_row(byte * buf);
- int update_row(const byte * old_data, byte * new_data);
- int delete_row(const byte * buf);
+ int write_row(byte * buf);
+ int update_row(const byte * old_data, byte * new_data);
+ int delete_row(const byte * buf);
+ bool was_semi_consistent_read();
+ void try_semi_consistent_read(bool yes);
void unlock_row();
- int index_init(uint index);
- int index_end();
- int index_read(byte * buf, const byte * key,
- uint key_len, enum ha_rkey_function find_flag);
- int index_read_idx(byte * buf, uint index, const byte * key,
+ int index_init(uint index, bool sorted);
+ int index_end();
+ int index_read(byte * buf, const byte * key,
+ uint key_len, enum ha_rkey_function find_flag);
+ int index_read_idx(byte * buf, uint index, const byte * key,
uint key_len, enum ha_rkey_function find_flag);
int index_read_last(byte * buf, const byte * key, uint key_len);
- int index_next(byte * buf);
- int index_next_same(byte * buf, const byte *key, uint keylen);
- int index_prev(byte * buf);
- int index_first(byte * buf);
- int index_last(byte * buf);
-
- int rnd_init(bool scan);
- int rnd_end();
- int rnd_next(byte *buf);
- int rnd_pos(byte * buf, byte *pos);
-
- void position(const byte *record);
- void info(uint);
- int analyze(THD* thd,HA_CHECK_OPT* check_opt);
- int optimize(THD* thd,HA_CHECK_OPT* check_opt);
+ int index_next(byte * buf);
+ int index_next_same(byte * buf, const byte *key, uint keylen);
+ int index_prev(byte * buf);
+ int index_first(byte * buf);
+ int index_last(byte * buf);
+
+ int rnd_init(bool scan);
+ int rnd_end();
+ int rnd_next(byte *buf);
+ int rnd_pos(byte * buf, byte *pos);
+
+ void position(const byte *record);
+ void info(uint);
+ int analyze(THD* thd,HA_CHECK_OPT* check_opt);
+ int optimize(THD* thd,HA_CHECK_OPT* check_opt);
int discard_or_import_tablespace(my_bool discard);
- int extra(enum ha_extra_function operation);
- int external_lock(THD *thd, int lock_type);
+ int extra(enum ha_extra_function operation);
+ int external_lock(THD *thd, int lock_type);
int transactional_table_lock(THD *thd, int lock_type);
- int start_stmt(THD *thd, thr_lock_type lock_type);
+ int start_stmt(THD *thd, thr_lock_type lock_type);
- void position(byte *record);
- ha_rows records_in_range(uint inx, key_range *min_key, key_range
+ int ha_retrieve_all_cols()
+ {
+ ha_set_all_bits_in_read_set();
+ return extra(HA_EXTRA_RETRIEVE_ALL_COLS);
+ }
+ int ha_retrieve_all_pk()
+ {
+ ha_set_primary_key_in_read_set();
+ return extra(HA_EXTRA_RETRIEVE_PRIMARY_KEY);
+ }
+ void position(byte *record);
+ ha_rows records_in_range(uint inx, key_range *min_key, key_range
*max_key);
ha_rows estimate_rows_upper_bound();
- int create(const char *name, register TABLE *form,
+ int create(const char *name, register TABLE *form,
HA_CREATE_INFO *create_info);
int delete_all_rows();
- int delete_table(const char *name);
+ int delete_table(const char *name);
int rename_table(const char* from, const char* to);
int check(THD* thd, HA_CHECK_OPT* check_opt);
- char* update_table_comment(const char* comment);
+ char* update_table_comment(const char* comment);
char* get_foreign_key_create_info();
- int get_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list);
+ int get_foreign_key_list(THD *thd, List<FOREIGN_KEY_INFO> *f_key_list);
bool can_switch_engines();
- uint referenced_by_foreign_key();
+ uint referenced_by_foreign_key();
void free_foreign_key_create_info(char* str);
- THR_LOCK_DATA **store_lock(THD *thd, THR_LOCK_DATA **to,
- enum thr_lock_type lock_type);
+ THR_LOCK_DATA **store_lock(THD *thd, THR_LOCK_DATA **to,
+ enum thr_lock_type lock_type);
void init_table_handle_for_HANDLER();
ulonglong get_auto_increment();
int reset_auto_increment(ulonglong value);
virtual bool get_error_message(int error, String *buf);
- uint8 table_cache_type() { return HA_CACHE_TBL_ASKTRANSACT; }
- /*
- ask handler about permission to cache table during query registration
- */
- my_bool register_query_cache_table(THD *thd, char *table_key,
+ uint8 table_cache_type() { return HA_CACHE_TBL_ASKTRANSACT; }
+ /*
+ ask handler about permission to cache table during query registration
+ */
+ my_bool register_query_cache_table(THD *thd, char *table_key,
uint key_length,
qc_engine_callback *call_back,
ulonglong *engine_data)
- {
- *call_back= innobase_query_caching_of_table_permitted;
- *engine_data= 0;
- return innobase_query_caching_of_table_permitted(thd, table_key,
- key_length,
- engine_data);
- }
- static char *get_mysql_bin_log_name();
- static ulonglong get_mysql_bin_log_pos();
- bool primary_key_is_clustered() { return true; }
- int cmp_ref(const byte *ref1, const byte *ref2);
+ {
+ *call_back= innobase_query_caching_of_table_permitted;
+ *engine_data= 0;
+ return innobase_query_caching_of_table_permitted(thd, table_key,
+ key_length,
+ engine_data);
+ }
+ static char *get_mysql_bin_log_name();
+ static ulonglong get_mysql_bin_log_pos();
+ bool primary_key_is_clustered() { return true; }
+ int cmp_ref(const byte *ref1, const byte *ref2);
+ bool check_if_incompatible_data(HA_CREATE_INFO *info,
+ uint table_changes);
};
-extern struct show_var_st innodb_status_variables[];
+extern SHOW_VAR innodb_status_variables[];
+extern uint innobase_flush_log_at_trx_commit;
extern ulong innobase_fast_shutdown;
extern ulong innobase_large_page_size;
extern long innobase_mirrored_log_groups, innobase_log_files_in_group;
@@ -211,17 +226,18 @@ extern char *innobase_log_group_home_dir, *innobase_log_arch_dir;
extern char *innobase_unix_file_flush_method;
/* The following variables have to be my_bool for SHOW VARIABLES to work */
extern my_bool innobase_log_archive,
- innobase_use_doublewrite,
- innobase_use_checksums,
- innobase_use_large_pages,
- innobase_use_native_aio,
- innobase_file_per_table, innobase_locks_unsafe_for_binlog,
- innobase_create_status_file;
-extern my_bool innobase_very_fast_shutdown; /* set this to 1 just before
- calling innobase_end() if you want
- InnoDB to shut down without
- flushing the buffer pool: this
- is equivalent to a 'crash' */
+ innobase_use_doublewrite,
+ innobase_use_checksums,
+ innobase_use_large_pages,
+ innobase_use_native_aio,
+ innobase_file_per_table, innobase_locks_unsafe_for_binlog,
+ innobase_create_status_file;
+extern my_bool innobase_very_fast_shutdown; /* set this to 1 just before
+ calling innobase_end() if
+ you want InnoDB to shut down
+ without flushing the buffer
+ pool: this is equivalent to
+ a 'crash' */
extern "C" {
extern ulong srv_max_buf_pool_modified_pct;
extern ulong srv_max_purge_lag;
@@ -231,11 +247,10 @@ extern ulong srv_n_free_tickets_to_enter;
extern ulong srv_thread_sleep_delay;
extern ulong srv_thread_concurrency;
extern ulong srv_commit_concurrency;
-extern ulong srv_flush_log_at_trx_commit;
}
bool innobase_init(void);
-bool innobase_end(void);
+int innobase_end(ha_panic_function type);
bool innobase_flush_logs(void);
uint innobase_get_free_space(void);
@@ -245,20 +260,18 @@ uint innobase_get_free_space(void);
*/
#if 0
int innobase_report_binlog_offset_and_commit(
- THD* thd,
+ THD* thd,
void* trx_handle,
- char* log_file_name,
- my_off_t end_offset);
+ char* log_file_name,
+ my_off_t end_offset);
int innobase_commit_complete(void* trx_handle);
void innobase_store_binlog_offset_and_flush_log(char *binlog_name,longlong offset);
#endif
-int innobase_drop_database(char *path);
-bool innodb_show_status(THD* thd);
-bool innodb_mutex_show_status(THD* thd);
-void innodb_export_status(void);
+void innobase_drop_database(char *path);
+bool innobase_show_status(THD* thd, stat_print_fn*, enum ha_stat_type);
-void innobase_release_temporary_latches(THD *thd);
+int innobase_release_temporary_latches(THD *thd);
void innobase_store_binlog_offset_and_flush_log(char *binlog_name,longlong offset);
@@ -282,7 +295,7 @@ int innobase_xa_recover(
/*====================*/
/* out: number of prepared transactions
stored in xid_list */
- XID* xid_list, /* in/out: prepared transactions */
+ XID* xid_list, /* in/out: prepared transactions */
uint len); /* in: number of slots in xid_list */
/***********************************************************************