1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

cleanup: prepare "update_handler" for WITHOUT OVERLAPS

* rename to a generic name
* move remaning initializations from query exec to prepare time
* simplify/unify key handling in open_table_from_share and delayed
* remove dead code
* move tests where they belong
This commit is contained in:
Sergei Golubchik
2020-03-05 19:19:57 +01:00
parent 045510cb92
commit 0515577d12
17 changed files with 200 additions and 274 deletions

View File

@ -3025,10 +3025,12 @@ protected:
Table_flags cached_table_flags; /* Set on init() and open() */
ha_rows estimation_rows_to_insert;
handler *lookup_handler;
public:
handlerton *ht; /* storage engine of this handler */
uchar *ref; /* Pointer to current row */
uchar *dup_ref; /* Pointer to duplicate row */
uchar *lookup_buffer;
ha_statistics stats;
@ -3061,6 +3063,7 @@ public:
*/
bool in_range_check_pushed_down;
uint lookup_errkey;
uint errkey; /* Last dup key */
uint key_used_on_scan;
uint active_index, keyread;
@ -3068,7 +3071,6 @@ public:
/** Length of ref (1-8 or the clustered key length) */
uint ref_length;
FT_INFO *ft_handler;
handler *update_handler; /* Handler used in case of update */
enum init_stat { NONE=0, INDEX, RND };
init_stat inited, pre_inited;
@ -3225,13 +3227,14 @@ private:
public:
handler(handlerton *ht_arg, TABLE_SHARE *share_arg)
:table_share(share_arg), table(0),
estimation_rows_to_insert(0), ht(ht_arg),
ref(0), end_range(NULL),
estimation_rows_to_insert(0),
lookup_handler(this),
ht(ht_arg), ref(0), lookup_buffer(NULL), end_range(NULL),
implicit_emptied(0),
mark_trx_read_write_done(0),
check_table_binlog_row_based_done(0),
check_table_binlog_row_based_result(0),
in_range_check_pushed_down(FALSE), errkey(-1),
in_range_check_pushed_down(FALSE), lookup_errkey(-1), errkey(-1),
key_used_on_scan(MAX_KEY),
active_index(MAX_KEY), keyread(MAX_KEY),
ref_length(sizeof(my_off_t)),
@ -3268,8 +3271,6 @@ public:
return ref != 0;
}
virtual handler *clone(const char *name, MEM_ROOT *mem_root);
bool clone_handler_for_update();
void delete_update_handler();
/** This is called after create to allow us to set up cached variables */
void init()
{
@ -4646,7 +4647,7 @@ protected:
public:
bool check_table_binlog_row_based();
bool prepare_for_row_logging();
int prepare_for_insert(bool force_update_handler= 0);
int prepare_for_insert();
int binlog_log_row(TABLE *table,
const uchar *before_record,
const uchar *after_record,
@ -4671,6 +4672,12 @@ private:
void mark_trx_read_write_internal();
bool check_table_binlog_row_based_internal();
int create_lookup_handler();
void alloc_lookup_buffer();
int check_duplicate_long_entries(const uchar *new_rec);
int check_duplicate_long_entries_update(const uchar *new_rec);
int check_duplicate_long_entry_key(const uchar *new_rec, uint key_no);
protected:
/*
These are intended to be used only by handler::ha_xxxx() functions