mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
bug #21888 (Query on GEOMETRY field crashes the server)
RTree keys are really different from BTree and need specific paramters to be set by optimizer to work. Sometimes optimizer doesn't set those properly. Here we decided just to add code to check that the parameters are correct. Hope to fix optimizer sometimes. myisam/mi_range.c: return the error if min_key is NULL mysql-test/r/gis-rtree.result: test result mysql-test/t/gis-rtree.test: test case
This commit is contained in:
@ -71,6 +71,21 @@ ha_rows mi_records_in_range(MI_INFO *info, int inx, key_range *min_key,
|
|||||||
uchar * key_buff;
|
uchar * key_buff;
|
||||||
uint start_key_len;
|
uint start_key_len;
|
||||||
|
|
||||||
|
/*
|
||||||
|
The problem is that the optimizer doesn't support
|
||||||
|
RTree keys properly at the moment.
|
||||||
|
Hope this will be fixed some day.
|
||||||
|
But now NULL in the min_key means that we
|
||||||
|
didn't make the task for the RTree key
|
||||||
|
and expect BTree functionality from it.
|
||||||
|
As it's not able to handle such request
|
||||||
|
we return the error.
|
||||||
|
*/
|
||||||
|
if (!min_key)
|
||||||
|
{
|
||||||
|
res= HA_POS_ERROR;
|
||||||
|
break;
|
||||||
|
}
|
||||||
key_buff= info->lastkey+info->s->base.max_key_length;
|
key_buff= info->lastkey+info->s->base.max_key_length;
|
||||||
start_key_len= _mi_pack_key(info,inx, key_buff,
|
start_key_len= _mi_pack_key(info,inx, key_buff,
|
||||||
(uchar*) min_key->key, min_key->length,
|
(uchar*) min_key->key, min_key->length,
|
||||||
|
@ -857,3 +857,14 @@ CHECK TABLE t1 EXTENDED;
|
|||||||
Table Op Msg_type Msg_text
|
Table Op Msg_type Msg_text
|
||||||
test.t1 check status OK
|
test.t1 check status OK
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (foo GEOMETRY NOT NULL, SPATIAL INDEX(foo) );
|
||||||
|
INSERT INTO t1 (foo) VALUES (PointFromWKB(POINT(1,1)));
|
||||||
|
INSERT INTO t1 (foo) VALUES (PointFromWKB(POINT(1,0)));
|
||||||
|
INSERT INTO t1 (foo) VALUES (PointFromWKB(POINT(0,1)));
|
||||||
|
INSERT INTO t1 (foo) VALUES (PointFromWKB(POINT(0,0)));
|
||||||
|
SELECT 1 FROM t1 WHERE foo != PointFromWKB(POINT(0,0));
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -232,4 +232,14 @@ INSERT INTO t1 (c1) VALUES (
|
|||||||
CHECK TABLE t1 EXTENDED;
|
CHECK TABLE t1 EXTENDED;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #21888: Query on GEOMETRY field using PointFromWKB() results in lost connection
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (foo GEOMETRY NOT NULL, SPATIAL INDEX(foo) );
|
||||||
|
INSERT INTO t1 (foo) VALUES (PointFromWKB(POINT(1,1)));
|
||||||
|
INSERT INTO t1 (foo) VALUES (PointFromWKB(POINT(1,0)));
|
||||||
|
INSERT INTO t1 (foo) VALUES (PointFromWKB(POINT(0,1)));
|
||||||
|
INSERT INTO t1 (foo) VALUES (PointFromWKB(POINT(0,0)));
|
||||||
|
SELECT 1 FROM t1 WHERE foo != PointFromWKB(POINT(0,0));
|
||||||
|
DROP TABLE t1;
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
Reference in New Issue
Block a user