mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 04:22:27 +01:00
Fix and testcase for BUG#6699
This commit is contained in:
parent
cb538e45f5
commit
0bf584d9a5
4 changed files with 69 additions and 11 deletions
|
@ -88,6 +88,10 @@ int mi_rnext_same(MI_INFO *info, byte *buf)
|
|||
if (my_errno == HA_ERR_KEY_NOT_FOUND)
|
||||
my_errno=HA_ERR_END_OF_FILE;
|
||||
}
|
||||
else if (!buf)
|
||||
{
|
||||
DBUG_RETURN(info->lastpos==HA_OFFSET_ERROR ? my_errno : 0);
|
||||
}
|
||||
else if (!(*info->read_record)(info,info->lastpos,buf))
|
||||
{
|
||||
info->update|= HA_STATE_AKTIV; /* Record is read */
|
||||
|
|
|
@ -16,25 +16,36 @@
|
|||
|
||||
#include "myrg_def.h"
|
||||
|
||||
|
||||
int myrg_rnext_same(MYRG_INFO *info, byte *buf)
|
||||
{
|
||||
uint err;
|
||||
int err;
|
||||
MI_INFO *mi;
|
||||
|
||||
if (!info->current_table)
|
||||
return (HA_ERR_KEY_NOT_FOUND);
|
||||
|
||||
err=mi_rnext_same(info->current_table->table,buf);
|
||||
if (err == HA_ERR_END_OF_FILE)
|
||||
/* at first, do rnext for the table found before */
|
||||
if ((err=mi_rnext_same(info->current_table->table,NULL)))
|
||||
{
|
||||
queue_remove(&(info->by_key),0);
|
||||
if (!info->by_key.elements)
|
||||
return HA_ERR_END_OF_FILE;
|
||||
|
||||
mi=(info->current_table=(MYRG_TABLE *)queue_top(&(info->by_key)))->table;
|
||||
mi->once_flags|= RRND_PRESERVE_LASTINX;
|
||||
return mi_rrnd(mi,buf,mi->lastpos);
|
||||
if (err == HA_ERR_END_OF_FILE)
|
||||
{
|
||||
queue_remove(&(info->by_key),0);
|
||||
if (!info->by_key.elements)
|
||||
return HA_ERR_END_OF_FILE;
|
||||
}
|
||||
else
|
||||
return err;
|
||||
}
|
||||
return err;
|
||||
else
|
||||
{
|
||||
/* Found here, adding to queue */
|
||||
queue_top(&(info->by_key))=(byte *)(info->current_table);
|
||||
queue_replaced(&(info->by_key));
|
||||
}
|
||||
|
||||
/* now, mymerge's read_next is as simple as one queue_top */
|
||||
mi=(info->current_table=(MYRG_TABLE *)queue_top(&(info->by_key)))->table;
|
||||
return _myrg_mi_read_record(mi,buf);
|
||||
}
|
||||
|
||||
|
|
|
@ -651,3 +651,28 @@ ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
|||
create table t3 engine=merge union=(t1, t2) select * from t2;
|
||||
ERROR HY000: You can't specify target table 't2' for update in FROM clause
|
||||
drop table t1, t2;
|
||||
create table t1 (a int,b int,c int, index (a,b,c));
|
||||
create table t2 (a int,b int,c int, index (a,b,c));
|
||||
create table t3 (a int,b int,c int, index (a,b,c))
|
||||
engine=merge union=(t1 ,t2);
|
||||
insert into t1 (a,b,c) values (1,1,0),(1,2,0);
|
||||
insert into t2 (a,b,c) values (1,1,1),(1,2,1);
|
||||
explain select a,b,c from t3 force index (a) where a=1 order by a,b,c;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3 ref a a 5 const 2 Using where; Using index
|
||||
select a,b,c from t3 force index (a) where a=1 order by a,b,c;
|
||||
a b c
|
||||
1 1 0
|
||||
1 1 1
|
||||
1 2 0
|
||||
1 2 1
|
||||
explain select a,b,c from t3 force index (a) where a=1 order by a desc, b desc, c desc;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t3 ref a a 5 const 2 Using where; Using index
|
||||
select a,b,c from t3 force index (a) where a=1 order by a desc, b desc, c desc;
|
||||
a b c
|
||||
1 2 1
|
||||
1 2 0
|
||||
1 1 1
|
||||
1 1 0
|
||||
drop table t1, t2, t3;
|
||||
|
|
|
@ -285,3 +285,21 @@ create table t3 engine=merge union=(t1, t2) select * from t1;
|
|||
--error 1093
|
||||
create table t3 engine=merge union=(t1, t2) select * from t2;
|
||||
drop table t1, t2;
|
||||
|
||||
# BUG#6699 : no sorting on 'ref' retrieval
|
||||
create table t1 (a int,b int,c int, index (a,b,c));
|
||||
create table t2 (a int,b int,c int, index (a,b,c));
|
||||
create table t3 (a int,b int,c int, index (a,b,c))
|
||||
engine=merge union=(t1 ,t2);
|
||||
insert into t1 (a,b,c) values (1,1,0),(1,2,0);
|
||||
insert into t2 (a,b,c) values (1,1,1),(1,2,1);
|
||||
|
||||
explain select a,b,c from t3 force index (a) where a=1 order by a,b,c;
|
||||
select a,b,c from t3 force index (a) where a=1 order by a,b,c;
|
||||
|
||||
# this actually wasn't affected:
|
||||
explain select a,b,c from t3 force index (a) where a=1 order by a desc, b desc, c desc;
|
||||
select a,b,c from t3 force index (a) where a=1 order by a desc, b desc, c desc;
|
||||
|
||||
drop table t1, t2, t3;
|
||||
|
||||
|
|
Loading…
Reference in a new issue