mirror of
https://github.com/MariaDB/server.git
synced 2025-08-09 22:24:09 +03:00
Merge sanja.is.com.ua:/home/bell/mysql/bk/mysql-4.1
into sanja.is.com.ua:/home/bell/mysql/bk/work-4.1
This commit is contained in:
@@ -1899,3 +1899,24 @@ select t000.a, count(*) `C` FROM t1 t000 GROUP BY t000.a HAVING count(*) > ALL (
|
|||||||
a C
|
a C
|
||||||
1 1
|
1 1
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
CREATE TABLE `t1` ( `aid` int(11) NOT NULL default '0', `bid` int(11) NOT NULL default '0', PRIMARY KEY (`aid`,`bid`));
|
||||||
|
CREATE TABLE `t2` ( `aid` int(11) NOT NULL default '0', `bid` int(11) NOT NULL default '0', PRIMARY KEY (`aid`,`bid`));
|
||||||
|
insert into t1 values (1,1),(1,2),(2,1),(2,2);
|
||||||
|
insert into t2 values (1,2),(2,2);
|
||||||
|
select * from t1 where t1.aid not in (select aid from t2 where bid=t1.bid);
|
||||||
|
aid bid
|
||||||
|
1 1
|
||||||
|
2 1
|
||||||
|
alter table t2 drop primary key;
|
||||||
|
alter table t2 add key KEY1 (aid, bid);
|
||||||
|
select * from t1 where t1.aid not in (select aid from t2 where bid=t1.bid);
|
||||||
|
aid bid
|
||||||
|
1 1
|
||||||
|
2 1
|
||||||
|
alter table t2 drop key KEY1;
|
||||||
|
alter table t2 add primary key (bid, aid);
|
||||||
|
select * from t1 where t1.aid not in (select aid from t2 where bid=t1.bid);
|
||||||
|
aid bid
|
||||||
|
1 1
|
||||||
|
2 1
|
||||||
|
drop table t1,t2;
|
||||||
|
@@ -1222,3 +1222,19 @@ CREATE TABLE `t2` ( `b` int(11) default NULL, `a` int(11) default NULL) ENGINE=M
|
|||||||
insert into t2 values (1,2);
|
insert into t2 values (1,2);
|
||||||
select t000.a, count(*) `C` FROM t1 t000 GROUP BY t000.a HAVING count(*) > ALL (SELECT count(*) FROM t2 t001 WHERE t001.a=1);
|
select t000.a, count(*) `C` FROM t1 t000 GROUP BY t000.a HAVING count(*) > ALL (SELECT count(*) FROM t2 t001 WHERE t001.a=1);
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Optimized IN with compound index
|
||||||
|
#
|
||||||
|
CREATE TABLE `t1` ( `aid` int(11) NOT NULL default '0', `bid` int(11) NOT NULL default '0', PRIMARY KEY (`aid`,`bid`));
|
||||||
|
CREATE TABLE `t2` ( `aid` int(11) NOT NULL default '0', `bid` int(11) NOT NULL default '0', PRIMARY KEY (`aid`,`bid`));
|
||||||
|
insert into t1 values (1,1),(1,2),(2,1),(2,2);
|
||||||
|
insert into t2 values (1,2),(2,2);
|
||||||
|
select * from t1 where t1.aid not in (select aid from t2 where bid=t1.bid);
|
||||||
|
alter table t2 drop primary key;
|
||||||
|
alter table t2 add key KEY1 (aid, bid);
|
||||||
|
select * from t1 where t1.aid not in (select aid from t2 where bid=t1.bid);
|
||||||
|
alter table t2 drop key KEY1;
|
||||||
|
alter table t2 add primary key (bid, aid);
|
||||||
|
select * from t1 where t1.aid not in (select aid from t2 where bid=t1.bid);
|
||||||
|
drop table t1,t2;
|
||||||
|
@@ -1243,29 +1243,31 @@ int subselect_uniquesubquery_engine::exec()
|
|||||||
DBUG_ENTER("subselect_uniquesubquery_engine::exec");
|
DBUG_ENTER("subselect_uniquesubquery_engine::exec");
|
||||||
int error;
|
int error;
|
||||||
TABLE *table= tab->table;
|
TABLE *table= tab->table;
|
||||||
if ((tab->ref.key_err= (*tab->ref.key_copy)->copy()))
|
for (store_key **copy=tab->ref.key_copy ; *copy ; copy++)
|
||||||
{
|
{
|
||||||
table->status= STATUS_NOT_FOUND;
|
if (tab->ref.key_err= (*copy)->copy())
|
||||||
error= -1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!table->file->inited)
|
|
||||||
table->file->ha_index_init(tab->ref.key);
|
|
||||||
error= table->file->index_read(table->record[0],
|
|
||||||
tab->ref.key_buff,
|
|
||||||
tab->ref.key_length,HA_READ_KEY_EXACT);
|
|
||||||
if (error && error != HA_ERR_KEY_NOT_FOUND)
|
|
||||||
error= report_error(table, error);
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
error= 0;
|
table->status= STATUS_NOT_FOUND;
|
||||||
table->null_row= 0;
|
DBUG_RETURN(1);
|
||||||
((Item_in_subselect *) item)->value= (!table->status &&
|
|
||||||
(!cond || cond->val_int()) ? 1 :
|
|
||||||
0);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!table->file->inited)
|
||||||
|
table->file->ha_index_init(tab->ref.key);
|
||||||
|
error= table->file->index_read(table->record[0],
|
||||||
|
tab->ref.key_buff,
|
||||||
|
tab->ref.key_length,HA_READ_KEY_EXACT);
|
||||||
|
if (error && error != HA_ERR_KEY_NOT_FOUND)
|
||||||
|
error= report_error(table, error);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
error= 0;
|
||||||
|
table->null_row= 0;
|
||||||
|
((Item_in_subselect *) item)->value= (!table->status &&
|
||||||
|
(!cond || cond->val_int()) ? 1 :
|
||||||
|
0);
|
||||||
|
}
|
||||||
|
|
||||||
DBUG_RETURN(error != 0);
|
DBUG_RETURN(error != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1293,55 +1295,56 @@ int subselect_indexsubquery_engine::exec()
|
|||||||
((Item_in_subselect *) item)->was_null= 0;
|
((Item_in_subselect *) item)->was_null= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((*tab->ref.key_copy) && (tab->ref.key_err= (*tab->ref.key_copy)->copy()))
|
for (store_key **copy=tab->ref.key_copy ; *copy ; copy++)
|
||||||
{
|
{
|
||||||
table->status= STATUS_NOT_FOUND;
|
if (tab->ref.key_err= (*copy)->copy())
|
||||||
error= -1;
|
{
|
||||||
|
table->status= STATUS_NOT_FOUND;
|
||||||
|
DBUG_RETURN(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!table->file->inited)
|
||||||
|
table->file->ha_index_init(tab->ref.key);
|
||||||
|
error= table->file->index_read(table->record[0],
|
||||||
|
tab->ref.key_buff,
|
||||||
|
tab->ref.key_length,HA_READ_KEY_EXACT);
|
||||||
|
if (error && error != HA_ERR_KEY_NOT_FOUND)
|
||||||
|
error= report_error(table, error);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!table->file->inited)
|
for (;;)
|
||||||
table->file->ha_index_init(tab->ref.key);
|
|
||||||
error= table->file->index_read(table->record[0],
|
|
||||||
tab->ref.key_buff,
|
|
||||||
tab->ref.key_length,HA_READ_KEY_EXACT);
|
|
||||||
if (error && error != HA_ERR_KEY_NOT_FOUND)
|
|
||||||
error= report_error(table, error);
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
for (;;)
|
error= 0;
|
||||||
|
table->null_row= 0;
|
||||||
|
if (!table->status)
|
||||||
{
|
{
|
||||||
error= 0;
|
if (!cond || cond->val_int())
|
||||||
table->null_row= 0;
|
{
|
||||||
if (!table->status)
|
if (null_finding)
|
||||||
{
|
((Item_in_subselect *) item)->was_null= 1;
|
||||||
if (!cond || cond->val_int())
|
else
|
||||||
{
|
((Item_in_subselect *) item)->value= 1;
|
||||||
if (null_finding)
|
break;
|
||||||
((Item_in_subselect *) item)->was_null= 1;
|
}
|
||||||
else
|
error= table->file->index_next_same(table->record[0],
|
||||||
((Item_in_subselect *) item)->value= 1;
|
tab->ref.key_buff,
|
||||||
break;
|
tab->ref.key_length);
|
||||||
}
|
if (error && error != HA_ERR_END_OF_FILE)
|
||||||
error= table->file->index_next_same(table->record[0],
|
{
|
||||||
tab->ref.key_buff,
|
error= report_error(table, error);
|
||||||
tab->ref.key_length);
|
break;
|
||||||
if (error && error != HA_ERR_END_OF_FILE)
|
}
|
||||||
{
|
}
|
||||||
error= report_error(table, error);
|
else
|
||||||
break;
|
{
|
||||||
}
|
if (!check_null || null_finding)
|
||||||
}
|
break; /* We don't need to check nulls */
|
||||||
else
|
*tab->ref.null_ref_key= 1;
|
||||||
{
|
null_finding= 1;
|
||||||
if (!check_null || null_finding)
|
/* Check if there exists a row with a null value in the index */
|
||||||
break; /* We don't need to check nulls */
|
if ((error= (safe_index_read(tab) == 1)))
|
||||||
*tab->ref.null_ref_key= 1;
|
break;
|
||||||
null_finding= 1;
|
|
||||||
/* Check if there exists a row with a null value in the index */
|
|
||||||
if ((error= (safe_index_read(tab) == 1)))
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user