mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-16166 RBR breaks with HA_ERR_KEY_NOT_FOUND upon DELETE from table...
with spatial index So the issue is since it is spatial index , at the time of searching index for key (Rows_log_event::find_row) we use wrong field image we use Field::itRAW while we should be using Field::itMBR
This commit is contained in:
14
mysql-test/suite/rpl/r/rpl_row_spatial.result
Normal file
14
mysql-test/suite/rpl/r/rpl_row_spatial.result
Normal file
@@ -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.inc
|
17
mysql-test/suite/rpl/t/rpl_row_spatial.test
Normal file
17
mysql-test/suite/rpl/t/rpl_row_spatial.test
Normal file
@@ -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.inc
|
@@ -145,7 +145,8 @@ void key_copy(uchar *to_key, uchar *from_record, KEY *key_info,
|
|||||||
{
|
{
|
||||||
key_length-= HA_KEY_BLOB_LENGTH;
|
key_length-= HA_KEY_BLOB_LENGTH;
|
||||||
length= min(key_length, key_part->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)
|
if (with_zerofill && bytes < length)
|
||||||
bzero((char*) to_key + bytes, length - bytes);
|
bzero((char*) to_key + bytes, length - bytes);
|
||||||
to_key+= HA_KEY_BLOB_LENGTH;
|
to_key+= HA_KEY_BLOB_LENGTH;
|
||||||
|
Reference in New Issue
Block a user