diff options
author | Sergei Golubchik <serg@mariadb.org> | 2017-02-02 00:47:07 +0100 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2017-02-13 18:12:05 +0100 |
commit | e46c42217f4fc7ba43992ca54c039f2556d1859f (patch) | |
tree | cecd39b5d2528eb4ff102e1a86f2a17aec6cc0dc | |
parent | 460ff39871d6554ec17714a79a174cf8f80f7817 (diff) | |
download | mariadb-git-e46c42217f4fc7ba43992ca54c039f2556d1859f.tar.gz |
cleanup: TABLE::mark_columns_used_by_index()
mark_columns_used_by_index used to do
reset + mark_columns_used_by_index_no_reset + start keyread + set bitmaps
Now prepare_for_keyread does that, while mark_columns_used_by_index
does only reset + mark_columns_used_by_index_no_reset,
just as its name suggests.
-rw-r--r-- | sql/handler.cc | 4 | ||||
-rw-r--r-- | sql/key.cc | 3 | ||||
-rw-r--r-- | sql/opt_range.cc | 2 | ||||
-rw-r--r-- | sql/sql_class.cc | 8 | ||||
-rw-r--r-- | sql/sql_update.cc | 4 | ||||
-rw-r--r-- | sql/table.cc | 34 | ||||
-rw-r--r-- | sql/table.h | 9 |
7 files changed, 32 insertions, 32 deletions
diff --git a/sql/handler.cc b/sql/handler.cc index d32b13ef5fb..8781db30889 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -3224,7 +3224,7 @@ void handler::get_auto_increment(ulonglong offset, ulonglong increment, int error; MY_BITMAP *old_read_set; - old_read_set= table->mark_columns_used_by_index(table->s->next_number_index); + old_read_set= table->prepare_for_keyread(table->s->next_number_index); if (ha_index_init(table->s->next_number_index, 1)) { @@ -3276,7 +3276,7 @@ void handler::get_auto_increment(ulonglong offset, ulonglong increment, nr= ((ulonglong) table->next_number_field-> val_int_offset(table->s->rec_buff_length)+1); ha_index_end(); - table->restore_column_maps_after_mark_index(old_read_set); + table->restore_column_maps_after_keyread(old_read_set); *first_value= nr; return; } diff --git a/sql/key.cc b/sql/key.cc index 3bb009fcac9..bb10e902b8b 100644 --- a/sql/key.cc +++ b/sql/key.cc @@ -465,8 +465,7 @@ void key_unpack(String *to, TABLE *table, KEY *key) bool is_key_used(TABLE *table, uint idx, const MY_BITMAP *fields) { - bitmap_clear_all(&table->tmp_set); - table->mark_columns_used_by_index_no_reset(idx, &table->tmp_set); + table->mark_columns_used_by_index(idx, &table->tmp_set); return bitmap_is_overlapping(&table->tmp_set, fields); } diff --git a/sql/opt_range.cc b/sql/opt_range.cc index 58c6d8d0b2d..f013f6ae254 100644 --- a/sql/opt_range.cc +++ b/sql/opt_range.cc @@ -1534,7 +1534,7 @@ end: head->file= file; 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_keyread(index, &column_bitmap); head->prepare_for_position(); head->file= org_file; diff --git a/sql/sql_class.cc b/sql/sql_class.cc index f63ba4ed657..f042e6600e0 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -6489,21 +6489,19 @@ void THD::binlog_prepare_row_images(TABLE *table) */ DBUG_ASSERT(table->read_set != &table->tmp_set); - bitmap_clear_all(&table->tmp_set); - switch(thd->variables.binlog_row_image) { case BINLOG_ROW_IMAGE_MINIMAL: /* MINIMAL: Mark only PK */ - table->mark_columns_used_by_index_no_reset(table->s->primary_key, - &table->tmp_set); + table->mark_columns_used_by_index(table->s->primary_key, + &table->tmp_set); break; case BINLOG_ROW_IMAGE_NOBLOB: /** NOBLOB: Remove unnecessary BLOB fields from read_set (the ones that are not part of PK). */ - bitmap_union(&table->tmp_set, table->read_set); + bitmap_copy(&table->tmp_set, table->read_set); for (Field **ptr=table->field ; *ptr ; ptr++) { Field *field= (*ptr); diff --git a/sql/sql_update.cc b/sql/sql_update.cc index a74a4c2b761..9c0e9443b0d 100644 --- a/sql/sql_update.cc +++ b/sql/sql_update.cc @@ -191,7 +191,7 @@ static void prepare_record_for_error_message(int error, TABLE *table) /* Create unique_map with all fields used by that index. */ my_bitmap_init(&unique_map, unique_map_buf, table->s->fields, FALSE); - table->mark_columns_used_by_index_no_reset(keynr, &unique_map); + table->mark_columns_used_by_index(keynr, &unique_map); /* Subtract read_set and write_set. */ bitmap_subtract(&unique_map, table->read_set); @@ -539,7 +539,7 @@ int mysql_update(THD *thd, MY_BITMAP *save_write_set= table->write_set; if (query_plan.index < MAX_KEY && old_covering_keys.is_set(query_plan.index)) - table->mark_columns_used_by_index(query_plan.index); + table->prepare_for_keyread(query_plan.index); else table->use_all_columns(); diff --git a/sql/table.cc b/sql/table.cc index c9b356bbbed..093adf339b4 100644 --- a/sql/table.cc +++ b/sql/table.cc @@ -6070,27 +6070,29 @@ void TABLE::prepare_for_position() } -/* - Mark that only fields from one key is used - - NOTE: - This changes the bitmap to use the tmp bitmap - After this, you can't access any other columns in the table until - bitmaps are reset, for example with TABLE::clear_column_bitmaps() - or TABLE::restore_column_maps_after_mark_index() -*/ - -MY_BITMAP *TABLE::mark_columns_used_by_index_in_bitmap(uint index, - MY_BITMAP *bitmap) +MY_BITMAP *TABLE::prepare_for_keyread(uint index, MY_BITMAP *map) { MY_BITMAP *backup= read_set; - DBUG_ENTER("TABLE::mark_columns_used_by_index_in_bitmap"); + DBUG_ENTER("TABLE::prepare_for_keyread"); if (!no_keyread) file->ha_start_keyread(); + mark_columns_used_by_index(index, map); + column_bitmaps_set(map); + DBUG_RETURN(backup); +} + + +/* + Mark that only fields from one key is used. Useful before keyread. +*/ + +void TABLE::mark_columns_used_by_index(uint index, MY_BITMAP *bitmap) +{ + DBUG_ENTER("TABLE::mark_columns_used_by_index"); + bitmap_clear_all(bitmap); mark_columns_used_by_index_no_reset(index, bitmap); - column_bitmaps_set(bitmap); - DBUG_RETURN(backup); + DBUG_VOID_RETURN; } /* @@ -6104,7 +6106,7 @@ MY_BITMAP *TABLE::mark_columns_used_by_index_in_bitmap(uint index, when calling mark_columns_used_by_index */ -void TABLE::restore_column_maps_after_mark_index(MY_BITMAP *backup) +void TABLE::restore_column_maps_after_keyread(MY_BITMAP *backup) { DBUG_ENTER("TABLE::restore_column_maps_after_mark_index"); file->ha_end_keyread(); diff --git a/sql/table.h b/sql/table.h index 61efea0c5b3..adfefba3234 100644 --- a/sql/table.h +++ b/sql/table.h @@ -1306,11 +1306,12 @@ public: void reset_item_list(List<Item> *item_list) const; void clear_column_bitmaps(void); void prepare_for_position(void); + MY_BITMAP *prepare_for_keyread(uint index, MY_BITMAP *map); + MY_BITMAP *prepare_for_keyread(uint index) + { return prepare_for_keyread(index, &tmp_set); } + void mark_columns_used_by_index(uint index, MY_BITMAP *map); void mark_columns_used_by_index_no_reset(uint index, MY_BITMAP *map); - MY_BITMAP *mark_columns_used_by_index_in_bitmap(uint index, MY_BITMAP *map); - MY_BITMAP *mark_columns_used_by_index(uint index) - { return mark_columns_used_by_index_in_bitmap(index, &tmp_set); } - void restore_column_maps_after_mark_index(MY_BITMAP *backup); + void restore_column_maps_after_keyread(MY_BITMAP *backup); void mark_auto_increment_column(void); void mark_columns_needed_for_update(void); void mark_columns_needed_for_delete(void); |