diff --git a/sql/opt_range.cc b/sql/opt_range.cc index d41c4a45276..58c6d8d0b2d 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -1488,7 +1488,6 @@ int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler, { DBUG_RETURN(1); } - head->column_bitmaps_set(&column_bitmap, &column_bitmap, &column_bitmap); goto end; } @@ -1513,8 +1512,6 @@ int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler, goto failure; /* purecov: inspected */ } - head->column_bitmaps_set(&column_bitmap, &column_bitmap, &column_bitmap); - if (file->ha_external_lock(thd, F_RDLCK)) goto failure; @@ -1528,7 +1525,6 @@ int QUICK_RANGE_SELECT::init_ror_merged_scan(bool reuse_handler, last_rowid= file->ref; end: - DBUG_ASSERT(head->read_set == &column_bitmap); /* We are only going to read key fields and call position() on 'file' The following sets head->read_set (== column_bitmap) to only use this @@ -1536,11 +1532,9 @@ end: */ org_file= head->file; head->file= file; - head->mark_columns_used_by_index_no_reset(index, &column_bitmap); - - if (!head->no_keyread) - head->file->ha_start_keyread(); + head->column_bitmaps_set_no_signal(&column_bitmap, &column_bitmap, &column_bitmap); + head->mark_columns_used_by_index_in_bitmap(index, &column_bitmap); head->prepare_for_position(); head->file= org_file; diff --git a/sql/table.cc b/sql/table.cc index 58478daa0bf..8290d3d9ea5 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -6080,12 +6080,12 @@ void TABLE::prepare_for_position() or TABLE::restore_column_maps_after_mark_index() */ -void TABLE::mark_columns_used_by_index(uint index) +void TABLE::mark_columns_used_by_index_in_bitmap(uint index, MY_BITMAP *bitmap) { - MY_BITMAP *bitmap= &tmp_set; - DBUG_ENTER("TABLE::mark_columns_used_by_index"); + DBUG_ENTER("TABLE::mark_columns_used_by_index_in_bitmap"); - file->ha_start_keyread(); + if (!no_keyread) + file->ha_start_keyread(); bitmap_clear_all(bitmap); mark_columns_used_by_index_no_reset(index, bitmap); column_bitmaps_set(bitmap); @@ -6140,8 +6140,7 @@ void TABLE::restore_column_maps_after_mark_index() mark columns used by key, but don't reset other fields */ -void TABLE::mark_columns_used_by_index_no_reset(uint index, - MY_BITMAP *bitmap) +void TABLE::mark_columns_used_by_index_no_reset(uint index, MY_BITMAP *bitmap) { KEY_PART_INFO *key_part= key_info[index].key_part; KEY_PART_INFO *key_part_end= (key_part + diff --git a/sql/table.h b/sql/table.h index b12b5919d55..6c29a9767fb 100644 --- a/sql/table.h +++ b/sql/table.h @@ -1307,7 +1307,9 @@ public: void clear_column_bitmaps(void); void prepare_for_position(void); void mark_columns_used_by_index_no_reset(uint index, MY_BITMAP *map); - void mark_columns_used_by_index(uint index); + void mark_columns_used_by_index_in_bitmap(uint index, MY_BITMAP *map); + void mark_columns_used_by_index(uint index) + { mark_columns_used_by_index_in_bitmap(index, &tmp_set); } void add_read_columns_used_by_index(uint index); void restore_column_maps_after_mark_index(); void mark_auto_increment_column(void);