commit bde95bc70d0ac011f55f1b3b55fee1c9276859daAuthor: sachin <sachin.setiya@maridb.com>Date: Tue Jun 5 15:14:19 2018 +0530
MDEV-16166 RBR breaks with HA_ERR_KEY_NOT_FOUND upon DELETE from table...with spatial indexSo the issue is since it is spatial index , at the time of searching indexfor key (Rows_log_event::find_row) we use wrong field image we useField::itRAW while we should be using Field::itMBR
diff --git a/mysql-test/suite/rpl/r/rpl_row_spatial.result b/mysql-test/suite/rpl/r/rpl_row_spatial.resultnew file mode 100644index 00000000000..8f546fc479e--- /dev/null+++ b/mysql-test/suite/rpl/r/rpl_row_spatial.result@@ -0,0 +1,14 @@+include/master-slave.inc+[connection master]+CREATE TABLE t1 (g POINT NOT NULL, SPATIAL INDEX(g));+INSERT INTO t1 VALUES (ST_GEOMFROMTEXT('Point(1 1)'));+INSERT INTO t1 VALUES (ST_GEOMFROMTEXT('Point(2 1)'));+INSERT INTO t1 VALUES (ST_GEOMFROMTEXT('Point(1 2)'));+INSERT INTO t1 VALUES (ST_GEOMFROMTEXT('Point(2 2)'));+DELETE FROM t1 where MBREqual(g, ST_GEOMFROMTEXT('Point(1 2)'));+select count(*) from t1;+count(*)+3+DELETE FROM t1;+drop table t1;+include/rpl_end.incdiff --git a/mysql-test/suite/rpl/t/rpl_row_spatial.test b/mysql-test/suite/rpl/t/rpl_row_spatial.testnew file mode 100644index 00000000000..00c3dd7c54d--- /dev/null+++ b/mysql-test/suite/rpl/t/rpl_row_spatial.test@@ -0,0 +1,17 @@+--source include/have_binlog_format_row.inc+--source include/master-slave.inc++CREATE TABLE t1 (g POINT NOT NULL, SPATIAL INDEX(g));+INSERT INTO t1 VALUES (ST_GEOMFROMTEXT('Point(1 1)'));+INSERT INTO t1 VALUES (ST_GEOMFROMTEXT('Point(2 1)'));+INSERT INTO t1 VALUES (ST_GEOMFROMTEXT('Point(1 2)'));+INSERT INTO t1 VALUES (ST_GEOMFROMTEXT('Point(2 2)'));+DELETE FROM t1 where MBREqual(g, ST_GEOMFROMTEXT('Point(1 2)'));++--sync_slave_with_master+select count(*) from t1;++--connection master+DELETE FROM t1;+drop table t1;+--source include/rpl_end.incdiff --git a/sql/key.cc b/sql/key.ccindex 700bf6a05a6..7e5a3309b10 100644--- a/sql/key.cc+++ b/sql/key.cc@@ -145,7 +145,8 @@ void key_copy(uchar *to_key, uchar *from_record, KEY *key_info,{key_length-= HA_KEY_BLOB_LENGTH;length= min(key_length, key_part->length);- uint bytes= key_part->field->get_key_image(to_key, length, Field::itRAW);+ uint bytes= key_part->field->get_key_image(to_key, length,+ key_info->flags & HA_SPATIAL ? Field::itMBR : Field::itRAW);if (with_zerofill && bytes < length)bzero((char*) to_key + bytes, length - bytes);to_key+= HA_KEY_BLOB_LENGTH;
--
RegardsSachin Setiya
Software Engineer at MariaDB
_______________________________________________ commits mailing list commits@mariadb.org https://lists.askmonty.org/cgi-bin/mailman/listinfo/commits