◆ Sel_arg_range_sequence()
Sel_arg_range_sequence::Sel_arg_range_sequence |
( |
RANGE_OPT_PARAM * |
param_arg, |
|
|
bool * |
is_ror_scan_arg, |
|
|
uchar * |
min_key_arg, |
|
|
uchar * |
max_key_arg, |
|
|
bool |
skip_records_in_range_arg |
|
) |
| |
|
inline |
◆ reset()
void Sel_arg_range_sequence::reset |
( |
void |
| ) |
|
|
inline |
◆ stack_empty()
bool Sel_arg_range_sequence::stack_empty |
( |
| ) |
const |
|
inline |
◆ stack_pop_range()
void Sel_arg_range_sequence::stack_pop_range |
( |
| ) |
|
|
inline |
◆ stack_push_range()
void Sel_arg_range_sequence::stack_push_range |
( |
SEL_ARG * |
key_tree | ) |
|
◆ stack_size()
int Sel_arg_range_sequence::stack_size |
( |
| ) |
const |
|
inline |
◆ stack_top()
◆ curr_kp
int Sel_arg_range_sequence::curr_kp |
|
private |
◆ is_ror_scan
bool* Sel_arg_range_sequence::is_ror_scan |
◆ keyno
uint Sel_arg_range_sequence::keyno |
◆ max_key
uchar * Sel_arg_range_sequence::max_key |
◆ max_key_part
uint Sel_arg_range_sequence::max_key_part |
◆ min_key
uchar* Sel_arg_range_sequence::min_key |
◆ param
◆ range_count
uint Sel_arg_range_sequence::range_count = 0 |
◆ real_keyno
uint Sel_arg_range_sequence::real_keyno |
◆ skip_records_in_range
const bool Sel_arg_range_sequence::skip_records_in_range |
◆ stack
Stack of ranges for the curr_kp first keyparts.
Used by sel_arg_range_seq_next() so that if the next range is equal to the previous one for the first x keyparts, stack[x-1] can be accumulated with the new range in keyparts > x to quickly form the next range to return.
Notation used below: "x:y" means a range where "column_in_keypart_0=x" and "column_in_keypart_1=y". For simplicity, only equality (no BETWEEN, < etc) is considered in the example but the same principle applies to other range predicate operators too.
Consider a query with these range predicates: (kp0=1 and kp1=2 and kp2=3) or (kp0=1 and kp1=2 and kp2=4) or (kp0=1 and kp1=3 and kp2=5) or (kp0=1 and kp1=3 and kp2=6)
1) sel_arg_range_seq_next() is called the first time
- traverse the R-B tree (see SEL_ARG) to find the first range
- returns range "1:2:3"
- values in stack after this: stack[1, 1:2, 1:2:3] 2) sel_arg_range_seq_next() is called second time
- keypart 2 has another range, so the next range in keypart 2 is appended to stack[1] and saved in stack[2]
- returns range "1:2:4"
- values in stack after this: stack[1, 1:2, 1:2:4] 3) sel_arg_range_seq_next() is called the third time
- no more ranges in keypart 2, but keypart 1 has another range, so the next range in keypart 1 is appended to stack[0] and saved in stack[1]. The first range in keypart 2 is then appended to stack[1] and saved in stack[2]
- returns range "1:3:5"
- values in stack after this: stack[1, 1:3, 1:3:5] 4) sel_arg_range_seq_next() is called the fourth time
- keypart 2 has another range, see 2)
- returns range "1:3:6"
- values in stack after this: stack[1, 1:3, 1:3:6]
◆ start
SEL_ARG* Sel_arg_range_sequence::start |
The documentation for this class was generated from the following file: