summaryrefslogtreecommitdiff
path: root/sql/multi_range_read.h
diff options
context:
space:
mode:
authorSergey Petrunya <psergey@askmonty.org>2010-11-25 14:35:21 +0300
committerSergey Petrunya <psergey@askmonty.org>2010-11-25 14:35:21 +0300
commit92442fc59866445df21b38f21fe140c00b752094 (patch)
treef4c1d9a88b763e6d569f37ade53b411031093ac2 /sql/multi_range_read.h
parentfad2ec74999a7ff513c9421cae2c84b2408b7e92 (diff)
downloadmariadb-git-92442fc59866445df21b38f21fe140c00b752094.tar.gz
Merge MWL#121-125 DS-MRR improvements
- Address Monty's review feedback, part 4
Diffstat (limited to 'sql/multi_range_read.h')
-rw-r--r--sql/multi_range_read.h14
1 files changed, 9 insertions, 5 deletions
diff --git a/sql/multi_range_read.h b/sql/multi_range_read.h
index 8aebe786310..1e03cd9bbc0 100644
--- a/sql/multi_range_read.h
+++ b/sql/multi_range_read.h
@@ -189,7 +189,7 @@ class Mrr_reader
{
public:
virtual int get_next(char **range_info) = 0;
- virtual int refill_buffer() = 0;
+ virtual int refill_buffer(bool initial) = 0;
virtual ~Mrr_reader() {}; /* just to remove compiler warning */
};
@@ -228,7 +228,7 @@ public:
void *seq_init_param, uint n_ranges,
uint mode, Buffer_manager *buf_manager_arg);
int get_next(char **range_info);
- int refill_buffer() { return HA_ERR_END_OF_FILE; }
+ int refill_buffer(bool initial) { return initial? 0: HA_ERR_END_OF_FILE; }
uchar *get_rowid_ptr() { return h->ref; }
bool skip_record(char *range_id, uchar *rowid)
{
@@ -249,7 +249,7 @@ public:
void *seq_init_param, uint n_ranges,
uint mode, Buffer_manager *buf_manager_arg);
int get_next(char **range_info);
- int refill_buffer();
+ int refill_buffer(bool initial);
uchar *get_rowid_ptr() { return h->ref; }
bool skip_record(char *range_info, uchar *rowid)
@@ -298,6 +298,9 @@ private:
/* Range sequence iteration members */
RANGE_SEQ_IF mrr_funcs;
range_seq_t mrr_iter;
+
+ /* TRUE == reached eof when enumerating ranges */
+ bool source_exhausted;
static int compare_keys(void* arg, uchar* key1, uchar* key2);
static int compare_keys_reverse(void* arg, uchar* key1, uchar* key2);
@@ -319,7 +322,7 @@ public:
int init(handler *h, Mrr_index_reader *index_reader, uint mode,
Lifo_buffer *buf);
int get_next(char **range_info);
- int refill_buffer();
+ int refill_buffer(bool initial);
private:
handler *h; /* Handler to use */
@@ -332,6 +335,7 @@ private:
/* TRUE <=> index_reader->refill_buffer() call has returned EOF */
bool index_reader_exhausted;
+ bool index_reader_needs_refill;
/* TRUE <=> need range association, buffers hold {rowid, range_id} pairs */
bool is_mrr_assoc;
@@ -348,7 +352,7 @@ private:
uchar *rowid;
uchar *rowids_range_id;
- int refill_from_key_buffer();
+ int refill_from_index_reader();
};