mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 21:12:26 +01:00
Merge rkalimullin@bk-internal.mysql.com:/home/bk/mysql-4.1
into gw.mysql.r18.ru:/usr/home/ram/work/4.1.b5219
This commit is contained in:
commit
0eab587e93
3 changed files with 49 additions and 5 deletions
|
@ -466,3 +466,22 @@ insert IGNORE into t1 values ('Garbage');
|
|||
ERROR HY000: Unknown error
|
||||
alter table t1 add spatial index(a);
|
||||
drop table t1;
|
||||
create table t1(a geometry not null, spatial index(a));
|
||||
insert into t1 values
|
||||
(GeomFromText('POINT(1 1)')), (GeomFromText('POINT(3 3)')),
|
||||
(GeomFromText('POINT(4 4)')), (GeomFromText('POINT(6 6)'));
|
||||
select AsText(a) from t1 where
|
||||
MBRContains(GeomFromText('Polygon((0 0, 0 2, 2 2, 2 0, 0 0))'), a)
|
||||
or
|
||||
MBRContains(GeomFromText('Polygon((2 2, 2 5, 5 5, 5 2, 2 2))'), a);
|
||||
AsText(a)
|
||||
POINT(1 1)
|
||||
POINT(3 3)
|
||||
POINT(4 4)
|
||||
select AsText(a) from t1 where
|
||||
MBRContains(GeomFromText('Polygon((0 0, 0 2, 2 2, 2 0, 0 0))'), a)
|
||||
and
|
||||
MBRContains(GeomFromText('Polygon((0 0, 0 7, 7 7, 7 0, 0 0))'), a);
|
||||
AsText(a)
|
||||
POINT(1 1)
|
||||
drop table t1;
|
||||
|
|
|
@ -172,3 +172,21 @@ insert IGNORE into t1 values ('Garbage');
|
|||
alter table t1 add spatial index(a);
|
||||
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug #5219: problem with range optimizer
|
||||
#
|
||||
|
||||
create table t1(a geometry not null, spatial index(a));
|
||||
insert into t1 values
|
||||
(GeomFromText('POINT(1 1)')), (GeomFromText('POINT(3 3)')),
|
||||
(GeomFromText('POINT(4 4)')), (GeomFromText('POINT(6 6)'));
|
||||
select AsText(a) from t1 where
|
||||
MBRContains(GeomFromText('Polygon((0 0, 0 2, 2 2, 2 0, 0 0))'), a)
|
||||
or
|
||||
MBRContains(GeomFromText('Polygon((2 2, 2 5, 5 5, 5 2, 2 2))'), a);
|
||||
select AsText(a) from t1 where
|
||||
MBRContains(GeomFromText('Polygon((0 0, 0 2, 2 2, 2 0, 0 0))'), a)
|
||||
and
|
||||
MBRContains(GeomFromText('Polygon((0 0, 0 7, 7 7, 7 0, 0 0))'), a);
|
||||
drop table t1;
|
||||
|
|
|
@ -1302,14 +1302,14 @@ tree_and(PARAM *param,SEL_TREE *tree1,SEL_TREE *tree2)
|
|||
if (*key2 && !(*key2)->simple_key())
|
||||
flag|=CLONE_KEY2_MAYBE;
|
||||
*key1=key_and(*key1,*key2,flag);
|
||||
if ((*key1)->type == SEL_ARG::IMPOSSIBLE)
|
||||
if (*key1 && (*key1)->type == SEL_ARG::IMPOSSIBLE)
|
||||
{
|
||||
tree1->type= SEL_TREE::IMPOSSIBLE;
|
||||
#ifdef EXTRA_DEBUG
|
||||
(*key1)->test_use_count(*key1);
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
#ifdef EXTRA_DEBUG
|
||||
(*key1)->test_use_count(*key1);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
DBUG_RETURN(tree1);
|
||||
|
@ -1401,6 +1401,12 @@ key_and(SEL_ARG *key1,SEL_ARG *key2,uint clone_flag)
|
|||
return key2;
|
||||
if (!key2)
|
||||
return key1;
|
||||
if ((key1->min_flag | key2->min_flag) & GEOM_FLAG)
|
||||
{
|
||||
key1->free_tree();
|
||||
key2->free_tree();
|
||||
return 0; // Can't optimize this
|
||||
}
|
||||
if (key1->part != key2->part)
|
||||
{
|
||||
if (key1->part > key2->part)
|
||||
|
@ -1538,7 +1544,8 @@ key_or(SEL_ARG *key1,SEL_ARG *key2)
|
|||
key1->use_count--;
|
||||
key2->use_count--;
|
||||
|
||||
if (key1->part != key2->part)
|
||||
if (key1->part != key2->part ||
|
||||
(key1->min_flag | key2->min_flag) & GEOM_FLAG)
|
||||
{
|
||||
key1->free_tree();
|
||||
key2->free_tree();
|
||||
|
|
Loading…
Reference in a new issue