MCPcopy Create free account
hub / github.com/MariaDB/server / refill_buffer

Method refill_buffer

sql/multi_range_read.cc:797–843  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

795*/
796
797int Mrr_ordered_index_reader::refill_buffer(bool initial)
798{
799 KEY_MULTI_RANGE cur_range;
800 DBUG_ENTER("Mrr_ordered_index_reader::refill_buffer");
801
802 DBUG_ASSERT(key_buffer->is_empty());
803
804 if (source_exhausted)
805 DBUG_RETURN(HA_ERR_END_OF_FILE);
806
807 buf_manager->reset_buffer_sizes(buf_manager->arg);
808 key_buffer->reset();
809 key_buffer->setup_writing(keypar.key_size_in_keybuf,
810 is_mrr_assoc? sizeof(range_id_t) : 0);
811
812 while (key_buffer->can_write() &&
813 !(source_exhausted= mrr_funcs.next(mrr_iter, &cur_range)))
814 {
815 DBUG_ASSERT(cur_range.range_flag & EQ_RANGE);
816
817 /* Put key, or {key, range_id} pair into the buffer */
818 key_buffer->write_ptr1= keypar.use_key_pointers ?
819 (uchar*)&cur_range.start_key.key :
820 (uchar*)cur_range.start_key.key;
821 key_buffer->write_ptr2= (uchar*)&cur_range.ptr;
822 key_buffer->write();
823 }
824
825 /* Force get_next() to start with kv_it.init() call: */
826 scanning_key_val_iter= FALSE;
827
828 if (source_exhausted && key_buffer->is_empty())
829 DBUG_RETURN(HA_ERR_END_OF_FILE);
830
831 if (!initial)
832 {
833 /* This is a non-initial buffer fill and we've got a non-empty buffer */
834 THD *thd= current_thd;
835 status_var_increment(thd->status_var.ha_mrr_key_refills_count);
836 }
837
838 key_buffer->sort((key_buffer->type() == Lifo_buffer::FORWARD)
839 ? Mrr_ordered_index_reader::compare_keys_reverse
840 : Mrr_ordered_index_reader::compare_keys,
841 this);
842 DBUG_RETURN(0);
843}
844
845
846int Mrr_ordered_index_reader::init(handler *h_arg, RANGE_SEQ_IF *seq_funcs,

Callers 2

dsmrr_initMethod · 0.45
dsmrr_nextMethod · 0.45

Calls 9

reset_buffer_sizesMethod · 0.80
setup_writingMethod · 0.80
can_writeMethod · 0.80
is_emptyMethod · 0.45
resetMethod · 0.45
nextMethod · 0.45
writeMethod · 0.45
sortMethod · 0.45
typeMethod · 0.45

Tested by

no test coverage detected