summaryrefslogtreecommitdiff
path: root/sql/multi_range_read.h
diff options
context:
space:
mode:
authorSergey Petrunya <psergey@askmonty.org>2010-09-28 20:20:09 +0400
committerSergey Petrunya <psergey@askmonty.org>2010-09-28 20:20:09 +0400
commit61f26f0c62d2bfacb9c250baa1177e8186d5f0e7 (patch)
treee09872cc56f955d67b77e3cff4dc76867a234afb /sql/multi_range_read.h
parent8e59978b08569395a5ae24bd46c8db8548d18dd9 (diff)
downloadmariadb-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.h17
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);