• Aleksey Midenkov's avatar
    MDEV-25477 Auto-create breaks replication when triggering event was not replicated · 706a8232
    Aleksey Midenkov authored
    If UPDATE/DELETE does not change data it is skipped from
    replication. We now force replication of such events when they trigger
    partition auto-creation.
    
    For ROLLBACK it is as simple as set OPTION_KEEP_LOG
    flag. trans_cannot_safely_rollback() does the rest.
    
    For UPDATE/DELETE .. LIMIT 0 we make additional binlog_query() calls
    at the early points of return.
    
    As a safety measure we also convert row format into statement if it is
    needed. The condition is decided by
    binlog_need_stmt_format(). Basically if there are some row events in
    cache we don't need that: table open of row event will trigger
    auto-creation anyway.
    
    Multi-update/delete works via mysql_select(). There is no early points
    of return, so binlogging is always checked by
    send_eof()/abort_resultset(). But we must comply with the above
    measure of converting into statement.
    706a8232
sql_insert.cc 175 KB