summaryrefslogtreecommitdiff
path: root/sql/ha_partition.h
diff options
context:
space:
mode:
authorunknown <holyfoot/hf@mysql.com/hfmain.(none)>2007-09-07 18:41:49 +0500
committerunknown <holyfoot/hf@mysql.com/hfmain.(none)>2007-09-07 18:41:49 +0500
commitafd34c69be22a45a85799297894d5725637d1dd5 (patch)
treee185e8a3f93c15c79cf45d5b9438585bc3dda5aa /sql/ha_partition.h
parenta3dc9569e983db92ca1ace1f3fe66428cd8098e2 (diff)
downloadmariadb-git-afd34c69be22a45a85799297894d5725637d1dd5.tar.gz
Bug #28430 Failure in replication of innodb partitioned tables on row/mixed format.
In the ha_partition::position() we don't calculate the number of the partition of the record, but use m_last_part value instead, relying on that it's previously set by some other call like ::write_row(). Delete_rows_log_event::do_exec_row() calls find_and_fetch_row(), where we used position() + rnd_pos() call for the InnoDB-based PARTITION-ed table as there HA_PRIMARY_KEY_REQUIRED_FOR_POSITION enabled. fixed by introducing new handler::rnd_pos_by_record() method to be used for random record-based positioning sql/ha_partition.cc: Bug #28430 Failure in replication of innodb partitioned tables on row/mixed format. ha_partition::rnd_pos_by_record() implemented sql/ha_partition.h: Bug #28430 Failure in replication of innodb partitioned tables on row/mixed format. ha_partition::rnd_pos_by_record() declared sql/handler.h: Bug #28430 Failure in replication of innodb partitioned tables on row/mixed format. handler::rnd_pos_by_record() introduced sql/log_event.cc: Bug #28430 Failure in replication of innodb partitioned tables on row/mixed format. handler::rnd_pos_by_record used instead of position() + rnd_pos() call
Diffstat (limited to 'sql/ha_partition.h')
-rw-r--r--sql/ha_partition.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/sql/ha_partition.h b/sql/ha_partition.h
index 434d90a4487..8fe512fadb3 100644
--- a/sql/ha_partition.h
+++ b/sql/ha_partition.h
@@ -353,6 +353,7 @@ public:
virtual int rnd_end();
virtual int rnd_next(uchar * buf);
virtual int rnd_pos(uchar * buf, uchar * pos);
+ virtual int rnd_pos_by_record(uchar *record);
virtual void position(const uchar * record);
/*