• V Narayanan's avatar
    Bug#45800 crash when replacing into a merge table and there is a duplicate · 5a5b5c82
    V Narayanan authored
          
    A REPLACE in the MERGE engine is actually a REPLACE
    into one (FIRST or LAST) of the underlying MyISAM
    tables. So in effect the server works on the meta
    data of the MERGE table, while the real insert happens
    in the MyISAM table.
    
    The MERGE table has no index, while MyISAM has a
    unique index. When a REPLACE into a MERGE table (
    and the REPLACE conflicts with a duplicate in a
    child table) is done, we try to access the duplicate
    key information for the MERGE table. This information
    actually does not exist, hence this results in a crash.
    
    The problem can be resolved by modifying the MERGE
    engine to provide us the duplicate key information
    directly, instead of just returning the MyISAM index
    number as the error key. Then the SQL layer (or "the
    server") does not try to access the key_info of the
    MERGE table, which does not exist.
    
    The current patch modifies the MERGE engine to provide
    the position for a record where a unique key violation
    occurs.
    5a5b5c82
ha_myisammrg.cc 41.3 KB