diff options
author | Sergey Petrunya <psergey@askmonty.org> | 2010-09-28 20:20:09 +0400 |
---|---|---|
committer | Sergey Petrunya <psergey@askmonty.org> | 2010-09-28 20:20:09 +0400 |
commit | 61f26f0c62d2bfacb9c250baa1177e8186d5f0e7 (patch) | |
tree | e09872cc56f955d67b77e3cff4dc76867a234afb /sql/multi_range_read.h | |
parent | 8e59978b08569395a5ae24bd46c8db8548d18dd9 (diff) | |
download | mariadb-git-61f26f0c62d2bfacb9c250baa1177e8186d5f0e7.tar.gz |
DS-MRR improvements: address review feedback
- change dsmrr_next_from_index() to a switch-based state automaton-like structure.
Diffstat (limited to 'sql/multi_range_read.h')
-rw-r--r-- | sql/multi_range_read.h | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/sql/multi_range_read.h b/sql/multi_range_read.h index 2ac477a0949..dfe3f99195a 100644 --- a/sql/multi_range_read.h +++ b/sql/multi_range_read.h @@ -197,11 +197,22 @@ private: /** Index scaning and key buffer-related members **/ + + enum enum_index_scan_state { + NEED_MORE_RANGES, + IN_RANGE_LIST, + IN_INDEX_RANGE, + IN_IDENTICAL_KEYS_RANGE, + SCAN_FINISHED + }; + + enum enum_index_scan_state index_scan_state; + /* TRUE <=> We can get at most one index tuple for a lookup key */ bool index_ranges_unique; /* TRUE<=> we're in a middle of enumerating records for a key range */ - bool in_index_range; + //bool in_index_range; /* One of the following two is used for key buffer: forward is used when @@ -249,7 +260,7 @@ private: subsequent key values are the same as the one we've already retrieved and returned index tuple for. */ - bool in_identical_keys_range; + //bool in_identical_keys_range; /* range_id of the first of the identical keys */ char *first_identical_range_info; @@ -303,6 +314,8 @@ private: void setup_buffer_sizes(key_range *sample_key); void reallocate_buffer_space(); + + void read_out_identical_ranges(); static range_seq_t key_buf_seq_init(void *init_param, uint n_ranges, uint flags); static uint key_buf_seq_next(range_seq_t rseq, KEY_MULTI_RANGE *range); |