mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Applying InnoDB snapshot 5.0-ss6230, Part 1. Fixes BUG#47777
BUG#47777 - innodb dies with spatial pk: Failing assertion: buf <= original_buf + buf_len Detailed revision comments: r6178 | jyang | 2009-11-17 08:52:11 +0200 (Tue, 17 Nov 2009) | 6 lines branches/5.0: Merge fix for bug #47777 from branches/5.1 -r6045 to bracnches/5.0. Treat the Geometry data same as Binary BLOB in ha_innobase::store_key_val_for_row(), since the Geometry data is stored as Binary BLOB in Innodb.
This commit is contained in:
13
mysql-test/r/innodb_bug47777.result
Normal file
13
mysql-test/r/innodb_bug47777.result
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
create table bug47777(c2 linestring not null, primary key (c2(1))) engine=innodb;
|
||||||
|
insert into bug47777 values (geomfromtext('linestring(1 2,3 4,5 6,7 8,9 10)'));
|
||||||
|
select count(*) from bug47777 where c2 =geomfromtext('linestring(1 2,3 4,5 6,7 8,9 10)');
|
||||||
|
count(*)
|
||||||
|
1
|
||||||
|
update bug47777 set c2=GeomFromText('POINT(1 1)');
|
||||||
|
select count(*) from bug47777 where c2 =geomfromtext('linestring(1 2,3 4,5 6,7 8,9 10)');
|
||||||
|
count(*)
|
||||||
|
0
|
||||||
|
select count(*) from bug47777 where c2 = GeomFromText('POINT(1 1)');
|
||||||
|
count(*)
|
||||||
|
1
|
||||||
|
drop table bug47777;
|
24
mysql-test/t/innodb_bug47777.test
Normal file
24
mysql-test/t/innodb_bug47777.test
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# This is the test for bug 47777. GEOMETRY
|
||||||
|
# data is treated as BLOB data in innodb.
|
||||||
|
# Consequently, its key value generation/storing
|
||||||
|
# should follow the process for the BLOB
|
||||||
|
# datatype as well.
|
||||||
|
|
||||||
|
--source include/have_innodb.inc
|
||||||
|
|
||||||
|
create table bug47777(c2 linestring not null, primary key (c2(1))) engine=innodb;
|
||||||
|
|
||||||
|
insert into bug47777 values (geomfromtext('linestring(1 2,3 4,5 6,7 8,9 10)'));
|
||||||
|
|
||||||
|
# Verify correct row get inserted.
|
||||||
|
select count(*) from bug47777 where c2 =geomfromtext('linestring(1 2,3 4,5 6,7 8,9 10)');
|
||||||
|
|
||||||
|
# Update table bug47777 should be successful.
|
||||||
|
update bug47777 set c2=GeomFromText('POINT(1 1)');
|
||||||
|
|
||||||
|
# Verify the row get updated successfully. The original
|
||||||
|
# c2 value should be changed to GeomFromText('POINT(1 1)').
|
||||||
|
select count(*) from bug47777 where c2 =geomfromtext('linestring(1 2,3 4,5 6,7 8,9 10)');
|
||||||
|
select count(*) from bug47777 where c2 = GeomFromText('POINT(1 1)');
|
||||||
|
|
||||||
|
drop table bug47777;
|
@@ -2767,7 +2767,10 @@ ha_innobase::store_key_val_for_row(
|
|||||||
} else if (mysql_type == FIELD_TYPE_TINY_BLOB
|
} else if (mysql_type == FIELD_TYPE_TINY_BLOB
|
||||||
|| mysql_type == FIELD_TYPE_MEDIUM_BLOB
|
|| mysql_type == FIELD_TYPE_MEDIUM_BLOB
|
||||||
|| mysql_type == FIELD_TYPE_BLOB
|
|| mysql_type == FIELD_TYPE_BLOB
|
||||||
|| mysql_type == FIELD_TYPE_LONG_BLOB) {
|
|| mysql_type == FIELD_TYPE_LONG_BLOB
|
||||||
|
/* MYSQL_TYPE_GEOMETRY data is treated
|
||||||
|
as BLOB data in innodb. */
|
||||||
|
|| mysql_type == FIELD_TYPE_GEOMETRY) {
|
||||||
|
|
||||||
CHARSET_INFO* cs;
|
CHARSET_INFO* cs;
|
||||||
ulint key_len;
|
ulint key_len;
|
||||||
|
Reference in New Issue
Block a user