diff options
author | unknown <mats@romeo.(none)> | 2007-04-12 15:50:54 +0200 |
---|---|---|
committer | unknown <mats@romeo.(none)> | 2007-04-12 15:50:54 +0200 |
commit | 5c35b4174ef8a3505f927444ec9001848b3073be (patch) | |
tree | 99bc39551e216b0f815a7d3af2d4237c7ed72cc9 /sql/log_event_old.cc | |
parent | ec9b5eca9cee569eb4c1442cb0ab47c72dac818d (diff) | |
download | mariadb-git-5c35b4174ef8a3505f927444ec9001848b3073be.tar.gz |
BUG#27779 (Slave cannot read old rows log events):
Taking code from before BUG#22583 and incorporating as events to be able
to read old events. Also incorporating old pack and unpack functions
into patch.
client/Makefile.am:
Adding files log_event_old.{h,cc} and rpl_record_old.{h,cc}
client/mysqlbinlog.cc:
Adding log_event_old.cc.
libmysqld/Makefile.am:
Adding files log_event_old.{h,cc} and rpl_record_old.{h,cc}
sql/CMakeLists.txt:
Adding files log_event_old.{h,cc} and rpl_record_old.{h,cc}
sql/Makefile.am:
Adding files log_event_old.{h,cc} and rpl_record_old.{h,cc}
sql/log_event.cc:
Adding code to read pre-GA rows events.
sql/log_event.h:
Refactoring to support inheritance and including "old" events definitions.
sql/log_event_old.cc:
New BitKeeper file ``sql/log_event_old.cc''
sql/log_event_old.h:
New BitKeeper file ``sql/log_event_old.h''
sql/rpl_record_old.cc:
New BitKeeper file ``sql/rpl_record_old.cc''
sql/rpl_record_old.h:
New BitKeeper file ``sql/rpl_record_old.h''
Diffstat (limited to 'sql/log_event_old.cc')
-rw-r--r-- | sql/log_event_old.cc | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/sql/log_event_old.cc b/sql/log_event_old.cc new file mode 100644 index 00000000000..1172a3e0ad4 --- /dev/null +++ b/sql/log_event_old.cc @@ -0,0 +1,98 @@ + +#include "mysql_priv.h" +#include "log_event_old.h" +#include "rpl_record_old.h" + +#if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION) +int +Write_rows_log_event_old::do_prepare_row(THD *thd, RELAY_LOG_INFO *rli, + TABLE *table, + char const *row_start, + char const **row_end) +{ + DBUG_ASSERT(table != NULL); + DBUG_ASSERT(row_start && row_end); + + int error; + error= unpack_row_old(rli, table, m_width, table->record[0], + row_start, &m_cols, row_end, &m_master_reclength, + table->write_set, PRE_GA_WRITE_ROWS_EVENT); + bitmap_copy(table->read_set, table->write_set); + return error; +} + + +int +Delete_rows_log_event_old::do_prepare_row(THD *thd, RELAY_LOG_INFO *rli, + TABLE *table, + char const *row_start, + char const **row_end) +{ + int error; + DBUG_ASSERT(row_start && row_end); + /* + This assertion actually checks that there is at least as many + columns on the slave as on the master. + */ + DBUG_ASSERT(table->s->fields >= m_width); + + error= unpack_row_old(rli, table, m_width, table->record[0], + row_start, &m_cols, row_end, &m_master_reclength, + table->read_set, PRE_GA_DELETE_ROWS_EVENT); + /* + If we will access rows using the random access method, m_key will + be set to NULL, so we do not need to make a key copy in that case. + */ + if (m_key) + { + KEY *const key_info= table->key_info; + + key_copy(m_key, table->record[0], key_info, 0); + } + + return error; +} + + +int Update_rows_log_event_old::do_prepare_row(THD *thd, RELAY_LOG_INFO *rli, + TABLE *table, + char const *row_start, + char const **row_end) +{ + int error; + DBUG_ASSERT(row_start && row_end); + /* + This assertion actually checks that there is at least as many + columns on the slave as on the master. + */ + DBUG_ASSERT(table->s->fields >= m_width); + + /* record[0] is the before image for the update */ + error= unpack_row_old(rli, table, m_width, table->record[0], + row_start, &m_cols, row_end, &m_master_reclength, + table->read_set, PRE_GA_UPDATE_ROWS_EVENT); + row_start = *row_end; + /* m_after_image is the after image for the update */ + error= unpack_row_old(rli, table, m_width, m_after_image, + row_start, &m_cols, row_end, &m_master_reclength, + table->write_set, PRE_GA_UPDATE_ROWS_EVENT); + + DBUG_DUMP("record[0]", table->record[0], table->s->reclength); + DBUG_DUMP("m_after_image", m_after_image, table->s->reclength); + + + /* + If we will access rows using the random access method, m_key will + be set to NULL, so we do not need to make a key copy in that case. + */ + if (m_key) + { + KEY *const key_info= table->key_info; + + key_copy(m_key, table->record[0], key_info, 0); + } + + return error; +} + +#endif |