fixed bug of PROCEDURE in same query with subselects
prohibited using procedure inside subquery fixed error handling of procedure analize mysql-test/r/subselect.result: test of PROCEDURE in subselect test of PROCEDURE of subselect mysql-test/t/subselect.test: test of PROCEDURE in subselect test of PROCEDURE of subselect sql/sql_analyse.cc: fixed error handling in procedure analize sql/sql_parse.cc: fixed bug of PROCEDURE in same query with subselects sql/sql_yacc.yy: prohibited using procedure inside subquery
This commit is contained in:
parent
ef4f5b2148
commit
f67abe26fb
@ -43,6 +43,10 @@ SELECT 1 IN (SELECT 1);
|
||||
SELECT 1 FROM (SELECT 1 as a) b WHERE 1 IN (SELECT (SELECT a));
|
||||
1
|
||||
1
|
||||
select (SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE(1));
|
||||
Wrong usage of PROCEDURE and subquery
|
||||
SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE((SELECT 1));
|
||||
Incorrect parameters to procedure 'ANALYSE'
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8;
|
||||
create table t1 (a int);
|
||||
create table t2 (a int, b int);
|
||||
|
@ -20,6 +20,11 @@ SELECT * FROM (SELECT 1 as id) b WHERE id IN (SELECT * FROM (SELECT 1 as id) c O
|
||||
SELECT * FROM (SELECT 1) a WHERE 1 IN (SELECT 1,1);
|
||||
SELECT 1 IN (SELECT 1);
|
||||
SELECT 1 FROM (SELECT 1 as a) b WHERE 1 IN (SELECT (SELECT a));
|
||||
-- error 1221
|
||||
select (SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE(1));
|
||||
-- error 1108
|
||||
SELECT 1 FROM (SELECT 1) a PROCEDURE ANALYSE((SELECT 1));
|
||||
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8;
|
||||
create table t1 (a int);
|
||||
create table t2 (a int, b int);
|
||||
|
@ -89,21 +89,21 @@ proc_analyse_init(THD *thd, ORDER *param, select_result *result,
|
||||
if ((*param->item)->type() != Item::INT_ITEM ||
|
||||
(*param->item)->val() < 0)
|
||||
{
|
||||
net_printf(thd, ER_WRONG_PARAMETERS_TO_PROCEDURE, proc_name);
|
||||
my_error(ER_WRONG_PARAMETERS_TO_PROCEDURE, MYF(0), proc_name);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
pc->max_tree_elements = (uint) (*param->item)->val_int();
|
||||
param = param->next;
|
||||
if (param->next) // no third parameter possible
|
||||
{
|
||||
net_printf(thd, ER_WRONG_PARAMCOUNT_TO_PROCEDURE, proc_name);
|
||||
my_error(ER_WRONG_PARAMCOUNT_TO_PROCEDURE, MYF(0), proc_name);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
// second parameter
|
||||
if ((*param->item)->type() != Item::INT_ITEM ||
|
||||
(*param->item)->val() < 0)
|
||||
{
|
||||
net_printf(thd, ER_WRONG_PARAMETERS_TO_PROCEDURE, proc_name);
|
||||
my_error(ER_WRONG_PARAMETERS_TO_PROCEDURE, MYF(0), proc_name);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
pc->max_treemem = (uint) (*param->item)->val_int();
|
||||
@ -111,7 +111,7 @@ proc_analyse_init(THD *thd, ORDER *param, select_result *result,
|
||||
else if ((*param->item)->type() != Item::INT_ITEM ||
|
||||
(*param->item)->val() < 0)
|
||||
{
|
||||
net_printf(thd, ER_WRONG_PARAMETERS_TO_PROCEDURE, proc_name);
|
||||
my_error(ER_WRONG_PARAMETERS_TO_PROCEDURE, MYF(0), proc_name);
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
// if only one parameter was given, it will be the value of max_tree_elements
|
||||
|
@ -3054,9 +3054,12 @@ mysql_init_select(LEX *lex)
|
||||
select_lex->init_select();
|
||||
select_lex->master_unit()->select_limit= select_lex->select_limit=
|
||||
lex->thd->variables.select_limit;
|
||||
lex->exchange= 0;
|
||||
lex->result= 0;
|
||||
lex->proc_list.first= 0;
|
||||
if (select_lex == &lex->select_lex)
|
||||
{
|
||||
lex->exchange= 0;
|
||||
lex->result= 0;
|
||||
lex->proc_list.first= 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -2750,6 +2750,13 @@ procedure_clause:
|
||||
| PROCEDURE ident /* Procedure name */
|
||||
{
|
||||
LEX *lex=Lex;
|
||||
if (&lex->select_lex != lex->current_select)
|
||||
{
|
||||
net_printf(lex->thd, ER_WRONG_USAGE,
|
||||
"PROCEDURE",
|
||||
"subquery");
|
||||
YYABORT;
|
||||
}
|
||||
lex->proc_list.elements=0;
|
||||
lex->proc_list.first=0;
|
||||
lex->proc_list.next= (byte**) &lex->proc_list.first;
|
||||
|
Loading…
x
Reference in New Issue
Block a user