when we open the HEAP table for the first time since server restart,
in hp_open(), we set a flag to propagate this info to the handler level
which then writes a DELETE FROM this_heap_table to the binlog.
It is not a perfect solution for the bug, because between the server start and
the first open of the table, the slave still had old data in his table so
a SELECT on the slave may show wrong content. But if there is a --init-file
to populate the HEAP table on master as startup, then this is a safe fix
(I'll put a note about init-file in the HEAP section of the manual).
heap/hp_info.c:
new info variable implicit_emptied
heap/hp_open.c:
If this is the first open of the HEAP table, it means it is empty,
so we mark it.
include/heap.h:
new variables implicit_emptied
(we need one in HEAPINFO for the hp_info() call).
sql/ha_heap.cc:
report info to upper level
sql/handler.h:
new info 'implicit_emptied' in the handler level; only HEAP uses it.
sql/sql_base.cc:
When a HEAP table is opened for the first time, write a DELETE FROM to the binlog,
for replication and mysqlbinlog|mysql.
Monty: I added the
entry->file->implicit_emptied= 0;