Skip to content

Commit a632df9

Browse files
committed
improve Item_field::register_field_in_read_map()
make it to work when read_set == vcol_set, that is, when the caller wants to get a one complete bitmap of all fields a particular vcol depends on.
1 parent 7459f0c commit a632df9

File tree

1 file changed

+6
-8
lines changed

1 file changed

+6
-8
lines changed

sql/item.cc

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -901,17 +901,15 @@ bool Item_field::find_item_in_field_list_processor(void *arg)
901901
bool Item_field::register_field_in_read_map(void *arg)
902902
{
903903
TABLE *table= (TABLE *) arg;
904-
if (field->table == table || !table)
905-
bitmap_set_bit(field->table->read_set, field->field_index);
904+
int res= 0;
906905
if (field->vcol_info &&
907-
!bitmap_is_set(field->table->vcol_set, field->field_index))
906+
!bitmap_fast_test_and_set(field->table->vcol_set, field->field_index))
908907
{
909-
/* Ensure that the virtual fields is updated on read or write */
910-
bitmap_set_bit(field->table->vcol_set, field->field_index);
911-
return field->vcol_info->expr_item->walk(&Item::register_field_in_read_map,
912-
1, arg);
908+
res= field->vcol_info->expr_item->walk(&Item::register_field_in_read_map,1,arg);
913909
}
914-
return 0;
910+
if (field->table == table || !table)
911+
bitmap_set_bit(field->table->read_set, field->field_index);
912+
return res;
915913
}
916914

917915
/*

0 commit comments

Comments
 (0)