mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
WL#3700: Handler API change: all index search methods - that is,
index_read(), index_read_idx(), index_read_last(), and records_in_range() - instead of 'uint keylen' argument take 'ulonglong keypart_map', a bitmap showing which keyparts are present in the key value. Fallback method is provided for handlers that are lagging behind.
This commit is contained in:
@ -37,17 +37,22 @@ class QUICK_RANGE :public Sql_alloc {
|
||||
public:
|
||||
char *min_key,*max_key;
|
||||
uint16 min_length,max_length,flag;
|
||||
ulonglong min_keypart_map, max_keypart_map;
|
||||
#ifdef HAVE_purify
|
||||
uint16 dummy; /* Avoid warnings on 'flag' */
|
||||
#endif
|
||||
QUICK_RANGE(); /* Full range */
|
||||
QUICK_RANGE(const char *min_key_arg,uint min_length_arg,
|
||||
const char *max_key_arg,uint max_length_arg,
|
||||
QUICK_RANGE(const char *min_key_arg, uint min_length_arg,
|
||||
ulonglong min_keypart_map_arg,
|
||||
const char *max_key_arg, uint max_length_arg,
|
||||
ulonglong max_keypart_map_arg,
|
||||
uint flag_arg)
|
||||
: min_key((char*) sql_memdup(min_key_arg,min_length_arg+1)),
|
||||
max_key((char*) sql_memdup(max_key_arg,max_length_arg+1)),
|
||||
min_length((uint16) min_length_arg),
|
||||
max_length((uint16) max_length_arg),
|
||||
min_keypart_map(min_keypart_map_arg),
|
||||
max_keypart_map(max_keypart_map_arg),
|
||||
flag((uint16) flag_arg)
|
||||
{
|
||||
#ifdef HAVE_purify
|
||||
@ -318,7 +323,8 @@ public:
|
||||
int reset(void);
|
||||
int get_next();
|
||||
void range_end();
|
||||
int get_next_prefix(uint prefix_length, byte *cur_prefix);
|
||||
int get_next_prefix(uint prefix_length, ulonglong keypart_map,
|
||||
byte *cur_prefix);
|
||||
bool reverse_sorted() { return 0; }
|
||||
bool unique_key_range();
|
||||
int init_ror_merged_scan(bool reuse_handler);
|
||||
@ -605,6 +611,7 @@ private:
|
||||
byte *tmp_record; /* Temporary storage for next_min(), next_max(). */
|
||||
byte *group_prefix; /* Key prefix consisting of the GROUP fields. */
|
||||
uint group_prefix_len; /* Length of the group prefix. */
|
||||
uint group_key_parts;
|
||||
byte *last_prefix; /* Prefix of the last group for detecting EOF. */
|
||||
bool have_min; /* Specify whether we are computing */
|
||||
bool have_max; /* a MIN, a MAX, or both. */
|
||||
@ -616,6 +623,7 @@ private:
|
||||
uint key_infix_len;
|
||||
DYNAMIC_ARRAY min_max_ranges; /* Array of range ptrs for the MIN/MAX field. */
|
||||
uint real_prefix_len; /* Length of key prefix extended with key_infix. */
|
||||
uint real_key_parts;
|
||||
List<Item_sum> *min_functions;
|
||||
List<Item_sum> *max_functions;
|
||||
List_iterator<Item_sum> *min_functions_it;
|
||||
@ -638,10 +646,11 @@ private:
|
||||
public:
|
||||
QUICK_GROUP_MIN_MAX_SELECT(TABLE *table, JOIN *join, bool have_min,
|
||||
bool have_max, KEY_PART_INFO *min_max_arg_part,
|
||||
uint group_prefix_len, uint used_key_parts,
|
||||
KEY *index_info, uint use_index, double read_cost,
|
||||
ha_rows records, uint key_infix_len,
|
||||
byte *key_infix, MEM_ROOT *parent_alloc);
|
||||
uint group_prefix_len, uint group_key_parts,
|
||||
uint used_key_parts, KEY *index_info, uint
|
||||
use_index, double read_cost, ha_rows records, uint
|
||||
key_infix_len, byte *key_infix, MEM_ROOT
|
||||
*parent_alloc);
|
||||
~QUICK_GROUP_MIN_MAX_SELECT();
|
||||
bool add_range(SEL_ARG *sel_range);
|
||||
void update_key_stat();
|
||||
|
Reference in New Issue
Block a user