mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Fix for BUG#8877: Implementation of
"Early NULL-values filtering for ref access" (attempt2+post-review fixes) 1. update_ref_and_keys() accumulates info about null-rejecting predicates in in KEY_FIELD::null_rejecting, add_key_part saves these to KEYUSE. 2. create_ref_for_key copies them to TABLE_REF. 3. add_not_null_conds adds "x IS NOT NULL" to join_tab->select_cond of appropiate JOIN_TAB members. Includes code cleanups: * add_key_field() params: s/COND/Item_func/ (as only Item_funcs are passed to it) * add_key_fields() params: JOIN_TAB *stat removed (wasn't used)
This commit is contained in:
@ -31,6 +31,11 @@ typedef struct keyuse_t {
|
||||
uint key, keypart, optimize;
|
||||
key_part_map keypart_map;
|
||||
ha_rows ref_table_rows;
|
||||
/*
|
||||
If true, the comparison this value was created from will not be
|
||||
satisfied if val has NULL 'value'.
|
||||
*/
|
||||
bool null_rejecting;
|
||||
} KEYUSE;
|
||||
|
||||
class store_key;
|
||||
@ -45,6 +50,11 @@ typedef struct st_table_ref
|
||||
byte *key_buff2; // key_buff+key_length
|
||||
store_key **key_copy; //
|
||||
Item **items; // val()'s for each keypart
|
||||
/*
|
||||
(null_rejecting & (1<<i)) means the condition is '=' and no matching
|
||||
rows will be produced if items[i] IS NULL (see add_not_null_conds())
|
||||
*/
|
||||
key_part_map null_rejecting;
|
||||
table_map depend_map; // Table depends on these tables.
|
||||
byte *null_ref_key; // null byte position in the key_buf.
|
||||
// used for REF_OR_NULL optimization.
|
||||
|
Reference in New Issue
Block a user