mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
Bug#26827 - table->read_set is set incorrectly,
causing update of a different column Post-pushbuild fix. bitmap_set_bit() is an inline function in DEBUG builds and a macro in non-DEBUG builds. The latter evaluates its 'bit' argument twice. So one must not use increment/decrement operators on this argument. Moved increment of pointer out of bitmap_set_bit() call.
This commit is contained in:
parent
dc82068c96
commit
5ac6264dd6
2 changed files with 13 additions and 2 deletions
|
@ -103,6 +103,17 @@ extern void bitmap_lock_invert(MY_BITMAP *map);
|
|||
&= ~ (1 << ((BIT) & 7)))
|
||||
#define _bitmap_is_set(MAP, BIT) (uint) (((uchar*)(MAP)->bitmap)[(BIT) / 8] \
|
||||
& (1 << ((BIT) & 7)))
|
||||
/*
|
||||
WARNING!
|
||||
|
||||
The below symbols are inline functions in DEBUG builds and macros in
|
||||
non-DEBUG builds. The latter evaluate their 'bit' argument twice.
|
||||
|
||||
NEVER use an increment/decrement operator with the 'bit' argument.
|
||||
It would work with DEBUG builds, but fails later in production builds!
|
||||
|
||||
FORBIDDEN: bitmap_set_bit($my_bitmap, (field++)->field_index);
|
||||
*/
|
||||
#ifndef DBUG_OFF
|
||||
static inline void
|
||||
bitmap_set_bit(MY_BITMAP *map,uint bit)
|
||||
|
|
|
@ -606,8 +606,8 @@ static bool create_full_part_field_array(THD *thd, TABLE *table,
|
|||
partitioning.
|
||||
*/
|
||||
if ((ptr= part_info->full_part_field_array))
|
||||
while (*ptr)
|
||||
bitmap_set_bit(&part_info->full_part_field_set, (*ptr++)->field_index);
|
||||
for (; *ptr; ptr++)
|
||||
bitmap_set_bit(&part_info->full_part_field_set, (*ptr)->field_index);
|
||||
|
||||
end:
|
||||
DBUG_RETURN(result);
|
||||
|
|
Loading…
Reference in a new issue