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

Method refill_from_index_reader

sql/multi_range_read.cc:957–1017  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

955*/
956
957int Mrr_ordered_rndpos_reader::refill_from_index_reader()
958{
959 range_id_t range_info;
960 int res;
961 DBUG_ENTER("Mrr_ordered_rndpos_reader::refill_from_index_reader");
962
963 DBUG_ASSERT(rowid_buffer->is_empty());
964 index_rowid= index_reader->get_rowid_ptr();
965 rowid_buffer->reset();
966 rowid_buffer->setup_writing(file->ref_length,
967 is_mrr_assoc? sizeof(range_id_t) : 0);
968
969 last_identical_rowid= NULL;
970
971 index_reader->resume_read();
972 while (rowid_buffer->can_write())
973 {
974 res= index_reader->get_next(&range_info);
975
976 if (res)
977 {
978 if (res != HA_ERR_END_OF_FILE)
979 DBUG_RETURN(res);
980 index_reader_needs_refill=TRUE;
981 break;
982 }
983
984 index_reader->position();
985
986 /*
987 If the built rowid filter cannot be used at the engine level, use it here.
988 */
989 if (rowid_filter && !file->pushed_rowid_filter &&
990 !rowid_filter->check((char *)index_rowid))
991 continue;
992
993 /* Put rowid, or {rowid, range_id} pair into the buffer */
994 rowid_buffer->write_ptr1= index_rowid;
995 rowid_buffer->write_ptr2= (uchar*)&range_info;
996 rowid_buffer->write();
997 }
998
999 /*
1000 When index_reader_needs_refill=TRUE, this means we've got all of index
1001 tuples for lookups keys that index_reader had. We are not in the middle
1002 of an index read, so there is no need to call interrupt_read.
1003
1004 Actually, we must not call interrupt_read(), because it could be that we
1005 haven't read a single row (because all index lookups returned
1006 HA_ERR_KEY_NOT_FOUND). In this case, interrupt_read() will cause [harmless]
1007 valgrind warnings when trying to save garbage from table->record[0].
1008 */
1009 if (!index_reader_needs_refill)
1010 index_reader->interrupt_read();
1011 /* Sort the buffer contents by rowid */
1012 rowid_buffer->sort(rowid_cmp_reverse, (void*)file);
1013
1014 rowid_buffer->setup_reading(file->ref_length,

Callers

nothing calls this directly

Calls 13

setup_writingMethod · 0.80
can_writeMethod · 0.80
setup_readingMethod · 0.80
is_emptyMethod · 0.45
get_rowid_ptrMethod · 0.45
resetMethod · 0.45
resume_readMethod · 0.45
get_nextMethod · 0.45
positionMethod · 0.45
checkMethod · 0.45
writeMethod · 0.45
interrupt_readMethod · 0.45

Tested by

no test coverage detected