• Aleksey Midenkov's avatar
    MDEV-20515 multi-update tries to position updated table by null reference · 0932c580
    Aleksey Midenkov authored
    Cause
    
    Join tmp table inserts null row because of OUTER JOIN, that's
    expected. Since `multi_update::prepare2()` converted
    `Item_temptable_rowid` into `Item_field` (28dbdf3d)
    `multi_update::send_data()` accesses join tmp record directly and
    treats it as a normal row ignoring null status of ref field. NULL ref
    field is then treated as normal in `multi_update::do_updates()` which
    tries to position updated table by reference 0.
    
    Note that reference 0 may be valid reference and the first row of
    table can be wrongly updated (see multi_update.test).
    
    Fix
    
    Do not add row into multi-update tmp table in case of null ref
    field. Join tmp table does not have null_row status at this time (as
    well as `STATUS_NULL_ROW`) and cannot be skipped by these properties
    (see first comment in multi_update::send_data()). But it has all null
    fields (including the ref field).
    0932c580
sql_update.cc 91.2 KB