mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 18:41:56 +01:00
Many fixes.
I still have to make a test case for : UPDATE from sub-select with derived table
This commit is contained in:
parent
4158538dc7
commit
5988ae5ca5
9 changed files with 53 additions and 20 deletions
|
@ -235,4 +235,19 @@ select * from t2;
|
||||||
n d
|
n d
|
||||||
1 30
|
1 30
|
||||||
1 30
|
1 30
|
||||||
|
UPDATE t1 a ,t2 b SET t1.d=t2.d,t2.d=30 WHERE a.n=b.n;
|
||||||
|
select * from t1;
|
||||||
|
n d
|
||||||
|
1 30
|
||||||
|
3 2
|
||||||
|
select * from t2;
|
||||||
|
n d
|
||||||
|
1 30
|
||||||
|
1 30
|
||||||
|
DELETE t1, t2 FROM t1 a,t2 b where a.n=b.n;
|
||||||
|
select * from t1;
|
||||||
|
n d
|
||||||
|
3 2
|
||||||
|
select * from t2;
|
||||||
|
n d
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
|
|
@ -86,20 +86,20 @@ select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1);
|
||||||
a b
|
a b
|
||||||
1 7
|
1 7
|
||||||
2 7
|
2 7
|
||||||
select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1)
|
(select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1))
|
||||||
union (select * from t4 order by a limit 2) limit 3;
|
union (select * from t4 order by a limit 2) limit 3;
|
||||||
a b
|
a b
|
||||||
1 7
|
1 7
|
||||||
2 7
|
2 7
|
||||||
3 8
|
3 8
|
||||||
select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1)
|
(select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1))
|
||||||
union (select * from t4 where t4.b=(select max(t2.a)*4 from t2) order by a);
|
union (select * from t4 where t4.b=(select max(t2.a)*4 from t2) order by a);
|
||||||
a b
|
a b
|
||||||
1 7
|
1 7
|
||||||
2 7
|
2 7
|
||||||
3 8
|
3 8
|
||||||
4 8
|
4 8
|
||||||
explain select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1)
|
explain (select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1))
|
||||||
union (select * from t4 where t4.b=(select max(t2.a)*4 from t2) order by a);
|
union (select * from t4 where t4.b=(select max(t2.a)*4 from t2) order by a);
|
||||||
id select_type table type possible_keys key key_len ref rows Extra
|
id select_type table type possible_keys key key_len ref rows Extra
|
||||||
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where
|
1 PRIMARY t2 ALL NULL NULL NULL NULL 2 Using where
|
||||||
|
|
|
@ -213,4 +213,10 @@ insert into t2 values(1,10),(1,20);
|
||||||
UPDATE t1,t2 SET t1.d=t2.d,t2.d=30 WHERE t1.n=t2.n;
|
UPDATE t1,t2 SET t1.d=t2.d,t2.d=30 WHERE t1.n=t2.n;
|
||||||
select * from t1;
|
select * from t1;
|
||||||
select * from t2;
|
select * from t2;
|
||||||
|
UPDATE t1 a ,t2 b SET t1.d=t2.d,t2.d=30 WHERE a.n=b.n;
|
||||||
|
select * from t1;
|
||||||
|
select * from t2;
|
||||||
|
DELETE t1, t2 FROM t1 a,t2 b where a.n=b.n;
|
||||||
|
select * from t1;
|
||||||
|
select * from t2;
|
||||||
drop table t1,t2;
|
drop table t1,t2;
|
||||||
|
|
|
@ -44,11 +44,11 @@ select (select a from t3), a from t2;
|
||||||
select * from t2 where t2.a=(select a from t1);
|
select * from t2 where t2.a=(select a from t1);
|
||||||
insert into t3 values (6),(7),(3);
|
insert into t3 values (6),(7),(3);
|
||||||
select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1);
|
select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1);
|
||||||
select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1)
|
(select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1))
|
||||||
union (select * from t4 order by a limit 2) limit 3;
|
union (select * from t4 order by a limit 2) limit 3;
|
||||||
select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1)
|
(select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1))
|
||||||
union (select * from t4 where t4.b=(select max(t2.a)*4 from t2) order by a);
|
union (select * from t4 where t4.b=(select max(t2.a)*4 from t2) order by a);
|
||||||
explain select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1)
|
explain (select * from t2 where t2.b=(select a from t3 order by 1 desc limit 1))
|
||||||
union (select * from t4 where t4.b=(select max(t2.a)*4 from t2) order by a);
|
union (select * from t4 where t4.b=(select max(t2.a)*4 from t2) order by a);
|
||||||
select (select a from t3 where a<t2.a*4 order by 1 desc limit 1), a from t2;
|
select (select a from t3 where a<t2.a*4 order by 1 desc limit 1), a from t2;
|
||||||
select (select t3.a from t3 where a<8 order by 1 desc limit 1), a from
|
select (select t3.a from t3 where a<8 order by 1 desc limit 1), a from
|
||||||
|
|
|
@ -1062,6 +1062,8 @@ void Query_cache::invalidate(THD *thd, TABLE_LIST *tables_used,
|
||||||
for (; tables_used; tables_used=tables_used->next)
|
for (; tables_used; tables_used=tables_used->next)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(!using_transactions || tables_used->table!=0);
|
DBUG_ASSERT(!using_transactions || tables_used->table!=0);
|
||||||
|
if (tables_used->derived)
|
||||||
|
continue;
|
||||||
if (using_transactions &&
|
if (using_transactions &&
|
||||||
tables_used->table->file->has_transactions())
|
tables_used->table->file->has_transactions())
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -168,14 +168,9 @@ int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, TABLE_LIST *t)
|
||||||
tables->table_list->table=tables->table; // to fix a problem in EXPLAIN
|
tables->table_list->table=tables->table; // to fix a problem in EXPLAIN
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
if (is_union)
|
|
||||||
unit->exclude();
|
unit->exclude();
|
||||||
else
|
|
||||||
sl->exclude();
|
|
||||||
}
|
|
||||||
t->db=(char *)"";
|
t->db=(char *)"";
|
||||||
t->derived=(SELECT_LEX *)0; // just in case ...
|
t->derived=(SELECT_LEX *)1; // just in case ...
|
||||||
table->file->info(HA_STATUS_VARIABLE);
|
table->file->info(HA_STATUS_VARIABLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3001,6 +3001,7 @@ mysql_init_query(THD *thd)
|
||||||
lex->select_lex.link_prev= (st_select_lex_node**)&(lex->all_selects_list);
|
lex->select_lex.link_prev= (st_select_lex_node**)&(lex->all_selects_list);
|
||||||
lex->olap=lex->describe=0;
|
lex->olap=lex->describe=0;
|
||||||
lex->derived_tables= false;
|
lex->derived_tables= false;
|
||||||
|
lex->lock_option=TL_UNLOCK;
|
||||||
thd->check_loops_counter= thd->select_number=
|
thd->check_loops_counter= thd->select_number=
|
||||||
lex->select_lex.select_number= 1;
|
lex->select_lex.select_number= 1;
|
||||||
thd->free_list= 0;
|
thd->free_list= 0;
|
||||||
|
|
|
@ -1469,7 +1469,7 @@ int mysqld_show(THD *thd, const char *wild, show_var_st *variables,
|
||||||
end= int10_to_str((long) thd->query_id, buff, 10);
|
end= int10_to_str((long) thd->query_id, buff, 10);
|
||||||
break;
|
break;
|
||||||
case SHOW_RPL_STATUS:
|
case SHOW_RPL_STATUS:
|
||||||
end= int10_to_str((long) rpl_status_type[(int)rpl_status], buff, 10);
|
end= strmov(buff, rpl_status_type[(int)rpl_status]);
|
||||||
break;
|
break;
|
||||||
case SHOW_SLAVE_RUNNING:
|
case SHOW_SLAVE_RUNNING:
|
||||||
{
|
{
|
||||||
|
|
|
@ -1668,8 +1668,13 @@ select_init:
|
||||||
'(' SELECT_SYM select_part2 ')'
|
'(' SELECT_SYM select_part2 ')'
|
||||||
{
|
{
|
||||||
LEX *lex= Lex;
|
LEX *lex= Lex;
|
||||||
SELECT_LEX_NODE * sel= lex->current_select;
|
SELECT_LEX * sel= lex->current_select->select_lex();
|
||||||
if (sel->set_braces(1))
|
if (sel->set_braces(1))
|
||||||
|
{
|
||||||
|
send_error(lex->thd, ER_SYNTAX_ERROR);
|
||||||
|
YYABORT;
|
||||||
|
}
|
||||||
|
if (sel->linkage == UNION_TYPE && !sel->master_unit()->first_select()->braces)
|
||||||
{
|
{
|
||||||
send_error(lex->thd, ER_SYNTAX_ERROR);
|
send_error(lex->thd, ER_SYNTAX_ERROR);
|
||||||
YYABORT;
|
YYABORT;
|
||||||
|
@ -1683,11 +1688,17 @@ select_init2:
|
||||||
select_part2
|
select_part2
|
||||||
{
|
{
|
||||||
LEX *lex= Lex;
|
LEX *lex= Lex;
|
||||||
|
SELECT_LEX * sel= lex->current_select->select_lex();
|
||||||
if (lex->current_select->set_braces(0))
|
if (lex->current_select->set_braces(0))
|
||||||
{
|
{
|
||||||
send_error(lex->thd, ER_SYNTAX_ERROR);
|
send_error(lex->thd, ER_SYNTAX_ERROR);
|
||||||
YYABORT;
|
YYABORT;
|
||||||
}
|
}
|
||||||
|
if (sel->linkage == UNION_TYPE && sel->master_unit()->first_select()->braces)
|
||||||
|
{
|
||||||
|
send_error(lex->thd, ER_SYNTAX_ERROR);
|
||||||
|
YYABORT;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
union_clause
|
union_clause
|
||||||
;
|
;
|
||||||
|
@ -1695,6 +1706,7 @@ select_init2:
|
||||||
select_part2:
|
select_part2:
|
||||||
{
|
{
|
||||||
LEX *lex=Lex;
|
LEX *lex=Lex;
|
||||||
|
SELECT_LEX * sel= lex->current_select->select_lex();
|
||||||
if (lex->current_select == &lex->select_lex)
|
if (lex->current_select == &lex->select_lex)
|
||||||
lex->lock_option= TL_READ; /* Only for global SELECT */
|
lex->lock_option= TL_READ; /* Only for global SELECT */
|
||||||
mysql_init_select(lex);
|
mysql_init_select(lex);
|
||||||
|
@ -2509,7 +2521,9 @@ join_table:
|
||||||
lex->current_select= unit->outer_select();
|
lex->current_select= unit->outer_select();
|
||||||
if (!($$= lex->current_select->
|
if (!($$= lex->current_select->
|
||||||
add_table_to_list(lex->thd, new Table_ident(unit), $5, 0,
|
add_table_to_list(lex->thd, new Table_ident(unit), $5, 0,
|
||||||
lex->lock_option)))
|
lex->lock_option,(List<String> *)0,
|
||||||
|
(List<String> *)0)))
|
||||||
|
|
||||||
YYABORT;
|
YYABORT;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -3187,16 +3201,16 @@ table_wild_list:
|
||||||
| table_wild_list ',' table_wild_one {};
|
| table_wild_list ',' table_wild_one {};
|
||||||
|
|
||||||
table_wild_one:
|
table_wild_one:
|
||||||
ident opt_wild
|
ident opt_wild opt_table_alias
|
||||||
{
|
{
|
||||||
if (!Select->add_table_to_list(YYTHD, new Table_ident($1), NULL, 1,
|
if (!Select->add_table_to_list(YYTHD, new Table_ident($1), $3, 1,
|
||||||
Lex->lock_option))
|
Lex->lock_option))
|
||||||
YYABORT;
|
YYABORT;
|
||||||
}
|
}
|
||||||
| ident '.' ident opt_wild
|
| ident '.' ident opt_wild opt_table_alias
|
||||||
{
|
{
|
||||||
if (!Select->add_table_to_list(YYTHD, new Table_ident($1, $3, 0),
|
if (!Select->add_table_to_list(YYTHD, new Table_ident($1, $3, 0),
|
||||||
NULL, 1, Lex->lock_option))
|
$5, 1, Lex->lock_option))
|
||||||
YYABORT;
|
YYABORT;
|
||||||
}
|
}
|
||||||
;
|
;
|
||||||
|
|
Loading…
Add table
Reference in a new issue