Commit d54d67b5 authored by Sinisa@sinisa.nasamreza.org's avatar Sinisa@sinisa.nasamreza.org

Merge sinisa@work.mysql.com:/home/bk/mysql-5.0

into sinisa.nasamreza.org:/mnt/work/petica
parents de135f50 a1d21d89
...@@ -271,10 +271,10 @@ ...@@ -271,10 +271,10 @@
#define ER_SP_DOES_NOT_EXIST 1252 #define ER_SP_DOES_NOT_EXIST 1252
#define ER_SP_DROP_FAILED 1253 #define ER_SP_DROP_FAILED 1253
#define ER_SP_STORE_FAILED 1254 #define ER_SP_STORE_FAILED 1254
#define ER_SP_LEAVE_MISMATCH 1255 #define ER_SP_LILABEL_MISMATCH 1255
#define ER_SP_ITERATE_MISMATCH 1256 #define ER_SP_LABEL_REDEFINE 1256
#define ER_SP_LABEL_REDEFINE 1257 #define ER_SP_LABEL_MISMATCH 1257
#define ER_SP_LABEL_MISMATCH 1258 #define ER_SP_UNINIT_VAR 1258
#define ER_SP_UNINIT_VAR 1259 #define ER_SP_BADSELECT 1259
#define ER_ERROR_MESSAGES 260 #define ER_ERROR_MESSAGES 260
...@@ -72,10 +72,23 @@ set x = x-1; ...@@ -72,10 +72,23 @@ set x = x-1;
insert into test.t1 values ("a", x); insert into test.t1 values ("a", x);
end while; end while;
create procedure b(x int) create procedure b(x int)
sprepeat repeat
insert into test.t1 values ("b", x); insert into test.t1 values (repeat("b",3), x);
set x = x-1; set x = x-1;
until x = 0 end sprepeat; until x = 0 end repeat;
create procedure b2(x int)
repeat(select 1 into outfile 'b2');
insert into test.t1 values (repeat("b2",3), x);
set x = x-1;
until x = 0 end repeat;
drop procedure b2;
create procedure b3(x int)
repeat
select * from test.t1; # No INTO!
insert into test.t1 values (repeat("b3",3), x);
set x = x-1;
until x = 0 end repeat;
SELECT in a stored procedure must have INTO
create procedure c(x int) create procedure c(x int)
hmm: while x > 0 do hmm: while x > 0 do
insert into test.t1 values ("c", x); insert into test.t1 values ("c", x);
...@@ -196,9 +209,9 @@ delete from t1; ...@@ -196,9 +209,9 @@ delete from t1;
call b(3); call b(3);
select * from t1; select * from t1;
id data id data
b 3 bbb 3
b 2 bbb 2
b 1 bbb 1
delete from t1; delete from t1;
call c(3); call c(3);
select * from t1; select * from t1;
......
...@@ -122,10 +122,28 @@ end while| ...@@ -122,10 +122,28 @@ end while|
# REPEAT # REPEAT
create procedure b(x int) create procedure b(x int)
sprepeat repeat
insert into test.t1 values ("b", x); insert into test.t1 values (repeat("b",3), x);
set x = x-1; set x = x-1;
until x = 0 end sprepeat| until x = 0 end repeat|
# Check that repeat isn't parsed the wrong way
create procedure b2(x int)
repeat(select 1 into outfile 'b2');
insert into test.t1 values (repeat("b2",3), x);
set x = x-1;
until x = 0 end repeat|
# We don't actually want to call it.
drop procedure b2|
# Btw, this should generate an error
--error 1259
create procedure b3(x int)
repeat
select * from test.t1; # No INTO!
insert into test.t1 values (repeat("b3",3), x);
set x = x-1;
until x = 0 end repeat|
# Labelled WHILE with ITERATE (pointless really) # Labelled WHILE with ITERATE (pointless really)
create procedure c(x int) create procedure c(x int)
......
...@@ -318,7 +318,7 @@ static SYMBOL symbols[] = { ...@@ -318,7 +318,7 @@ static SYMBOL symbols[] = {
{ "REPAIR", SYM(REPAIR),0,0}, { "REPAIR", SYM(REPAIR),0,0},
{ "REPLACE", SYM(REPLACE),0,0}, { "REPLACE", SYM(REPLACE),0,0},
{ "REPLICATION", SYM(REPLICATION),0,0}, { "REPLICATION", SYM(REPLICATION),0,0},
{ "SPREPEAT", SYM(SPREPEAT_SYM),0,0}, /* QQ Temp. until conflict solved */ { "REPEAT", SYM(REPEAT_SYM),0,0},
{ "REPEATABLE", SYM(REPEATABLE_SYM),0,0}, { "REPEATABLE", SYM(REPEATABLE_SYM),0,0},
{ "REQUIRE", SYM(REQUIRE_SYM),0,0}, { "REQUIRE", SYM(REQUIRE_SYM),0,0},
{ "RESET", SYM(RESET_SYM),0,0}, { "RESET", SYM(RESET_SYM),0,0},
...@@ -567,7 +567,6 @@ static SYMBOL sql_functions[] = { ...@@ -567,7 +567,6 @@ static SYMBOL sql_functions[] = {
{ "RADIANS", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_radians)}, { "RADIANS", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_radians)},
{ "RAND", SYM(RAND),0,0}, { "RAND", SYM(RAND),0,0},
{ "RELEASE_LOCK", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_release_lock)}, { "RELEASE_LOCK", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_release_lock)},
{ "REPEAT", SYM(FUNC_ARG2),0,CREATE_FUNC(create_func_repeat)},
{ "REVERSE", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_reverse)}, { "REVERSE", SYM(FUNC_ARG1),0,CREATE_FUNC(create_func_reverse)},
{ "ROUND", SYM(ROUND),0,0}, { "ROUND", SYM(ROUND),0,0},
{ "RPAD", SYM(FUNC_ARG3),0,CREATE_FUNC(create_func_rpad)}, { "RPAD", SYM(FUNC_ARG3),0,CREATE_FUNC(create_func_rpad)},
......
...@@ -264,9 +264,9 @@ v/* ...@@ -264,9 +264,9 @@ v/*
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -258,9 +258,9 @@ ...@@ -258,9 +258,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -266,9 +266,9 @@ ...@@ -266,9 +266,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -256,8 +256,8 @@ ...@@ -256,8 +256,8 @@
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to CREATE PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -260,9 +260,9 @@ ...@@ -260,9 +260,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -255,9 +255,9 @@ ...@@ -255,9 +255,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -265,9 +265,9 @@ ...@@ -265,9 +265,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -255,9 +255,9 @@ ...@@ -255,9 +255,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -257,9 +257,9 @@ ...@@ -257,9 +257,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -255,9 +255,9 @@ ...@@ -255,9 +255,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -257,9 +257,9 @@ ...@@ -257,9 +257,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -255,9 +255,9 @@ ...@@ -255,9 +255,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -257,9 +257,9 @@ ...@@ -257,9 +257,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -257,9 +257,9 @@ ...@@ -257,9 +257,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -259,9 +259,9 @@ ...@@ -259,9 +259,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -255,9 +255,9 @@ ...@@ -255,9 +255,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -259,9 +259,9 @@ ...@@ -259,9 +259,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -258,9 +258,9 @@ ...@@ -258,9 +258,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -251,9 +251,9 @@ ...@@ -251,9 +251,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -263,9 +263,9 @@ ...@@ -263,9 +263,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -256,9 +256,9 @@ ...@@ -256,9 +256,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -255,9 +255,9 @@ ...@@ -255,9 +255,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -260,9 +260,9 @@ ...@@ -260,9 +260,9 @@
"PROCEDURE already exists" "PROCEDURE already exists"
"PROCEDURE does not exist" "PROCEDURE does not exist"
"Failed to DROP PROCEDURE" "Failed to DROP PROCEDURE"
"Failed to store PROCEDURE" "Failed to CREATE PROCEDURE"
"LEAVE with no matching label" "%s with no matching label"
"ITERATE with no matching label"
"Redefining label" "Redefining label"
"End-label without match" "End-label without match"
"Referring to uninitialized variable" "Referring to uninitialized variable"
"SELECT in a stored procedure must have INTO"
...@@ -535,8 +535,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); ...@@ -535,8 +535,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%token ITERATE_SYM %token ITERATE_SYM
%token LEAVE_SYM %token LEAVE_SYM
%token LOOP_SYM %token LOOP_SYM
/* QQ This is temporary, until the REPEAT conflict is solved. */ %token REPEAT_SYM
%token SPREPEAT_SYM
%token UNTIL_SYM %token UNTIL_SYM
%token WHILE_SYM %token WHILE_SYM
%token ASENSITIVE_SYM %token ASENSITIVE_SYM
...@@ -1042,12 +1041,21 @@ sp_proc_stmt: ...@@ -1042,12 +1041,21 @@ sp_proc_stmt:
statement statement
{ {
LEX *lex= Lex; LEX *lex= Lex;
if (lex->sql_command == SQLCOM_SELECT && !lex->result)
{
send_error(YYTHD, ER_SP_BADSELECT);
YYABORT;
}
else
{
sp_instr_stmt *i= new sp_instr_stmt(lex->sphead->instructions()); sp_instr_stmt *i= new sp_instr_stmt(lex->sphead->instructions());
i->set_lex(lex); i->set_lex(lex);
lex->sphead->add_instr(i); lex->sphead->add_instr(i);
lex->sphead->restore_lex(YYTHD); lex->sphead->restore_lex(YYTHD);
} }
}
| IF sp_if END IF {} | IF sp_if END IF {}
| CASE_SYM WHEN_SYM | CASE_SYM WHEN_SYM
{ {
...@@ -1097,7 +1105,7 @@ sp_proc_stmt: ...@@ -1097,7 +1105,7 @@ sp_proc_stmt:
if (! lab) if (! lab)
{ {
send_error(YYTHD, ER_SP_LEAVE_MISMATCH); send_error(YYTHD, ER_SP_LILABEL_MISMATCH, "LEAVE");
YYABORT; YYABORT;
} }
else else
...@@ -1115,7 +1123,7 @@ sp_proc_stmt: ...@@ -1115,7 +1123,7 @@ sp_proc_stmt:
if (! lab) if (! lab)
{ {
send_error(YYTHD, ER_SP_ITERATE_MISMATCH); send_error(YYTHD, ER_SP_LILABEL_MISMATCH, "ITERATE");
YYABORT; YYABORT;
} }
else else
...@@ -1284,8 +1292,8 @@ sp_unlabeled_control: ...@@ -1284,8 +1292,8 @@ sp_unlabeled_control:
lex->sphead->add_instr(i); lex->sphead->add_instr(i);
} }
| SPREPEAT_SYM sp_proc_stmts UNTIL_SYM expr END SPREPEAT_SYM | REPEAT_SYM sp_proc_stmts UNTIL_SYM expr END REPEAT_SYM
{ /* ^^ QQ temp. until conflict solved ^^ */ {
LEX *lex= Lex; LEX *lex= Lex;
uint ip= lex->sphead->instructions(); uint ip= lex->sphead->instructions();
sp_label_t *lab= lex->spcont->last_label(); /* Jumping back */ sp_label_t *lab= lex->spcont->last_label(); /* Jumping back */
...@@ -2517,6 +2525,8 @@ simple_expr: ...@@ -2517,6 +2525,8 @@ simple_expr:
{ $$= ((Item*(*)(Item*,Item*))($1.symbol->create_func))($3,$5);} { $$= ((Item*(*)(Item*,Item*))($1.symbol->create_func))($3,$5);}
| FUNC_ARG3 '(' expr ',' expr ',' expr ')' | FUNC_ARG3 '(' expr ',' expr ',' expr ')'
{ $$= ((Item*(*)(Item*,Item*,Item*))($1.symbol->create_func))($3,$5,$7);} { $$= ((Item*(*)(Item*,Item*,Item*))($1.symbol->create_func))($3,$5,$7);}
| REPEAT_SYM '(' expr ',' expr ')'
{ $$= new Item_func_repeat($3,$5); }
| ATAN '(' expr ')' | ATAN '(' expr ')'
{ $$= new Item_func_atan($3); } { $$= new Item_func_atan($3); }
| ATAN '(' expr ',' expr ')' | ATAN '(' expr ',' expr ')'
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment