• Alexey Kopytov's avatar
    Bug #53830: !table || (!table->read_set || · 1d0acc77
    Alexey Kopytov authored
                 bitmap_is_set(table->read_set, field_index))
    
    UPDATE on an InnoDB table modifying the same index that is used
    to satisfy the WHERE condition could trigger a debug assertion
    under some circumstances.
    
    Since for engines with the HA_PRIMARY_KEY_IN_READ_INDEX flag
    set results of an index scan on a secondary index are appended
    by the primary key value, if a query involves only columns from
    the primary key and a secondary index, the latter is considered
    to be covering.
    
    That tricks mysql_update() to mark for reading only columns
    from the secondary index when it does an index scan to retrieve
    rows to update in case a part of that key is also being
    updated. However, there may be other columns in WHERE that are
    part of the primary key, but not the secondary one.
    
    What we actually want to do in this case is to add index
    columns to the existing WHERE columns bitmap rather than
    replace it.
    
    mysql-test/r/innodb_mysql.result:
      Test case for bug #53830.
    mysql-test/t/innodb_mysql.test:
      Test case for bug #53830.
    sql/sql_update.cc:
      Add index columns to the read_set bitmap, don't replace it.
    sql/table.cc:
      Added a new add_read_columns_used_by_index() function to 
      st_table.
    sql/table.h:
      Added a new add_read_columns_used_by_index() function to 
      st_table.
    1d0acc77
sql_update.cc 68.1 KB