diff options
Diffstat (limited to 'sql/sql_yacc.yy')
-rw-r--r-- | sql/sql_yacc.yy | 61 |
1 files changed, 37 insertions, 24 deletions
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 27937999004..4224971fd47 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -92,6 +92,7 @@ inline Item *or_or_concat(THD *thd, Item* A, Item* B) chooser_compare_func_creator boolfunc2creator; struct sp_cond_type *spcondtype; struct { int vars, conds, hndlrs, curs; } spblock; + sp_name *spname; struct st_lex *lex; } @@ -771,6 +772,7 @@ END_OF_INPUT %type <spcondtype> sp_cond sp_hcond %type <spblock> sp_decls sp_decl %type <lex> sp_cursor_stmt +%type <spname> sp_name %type <NONE> '-' '+' '*' '/' '%' '(' ')' @@ -1019,15 +1021,15 @@ create: lex->name=$4.str; lex->create_info.options=$3; } - | CREATE udf_func_type FUNCTION_SYM IDENT_sys + | CREATE udf_func_type FUNCTION_SYM sp_name { LEX *lex=Lex; - lex->udf.name = $4; + lex->spname= $4; lex->udf.type= $2; } create_function_tail {} - | CREATE PROCEDURE ident + | CREATE PROCEDURE sp_name { LEX *lex= Lex; sp_head *sp; @@ -1078,7 +1080,7 @@ create: { LEX *lex= Lex; - lex->sphead->init_strings(YYTHD, lex, &$3); + lex->sphead->init_strings(YYTHD, lex, $3); lex->sql_command= SQLCOM_CREATE_PROCEDURE; /* Restore flag if it was cleared above */ if (lex->sphead->m_old_cmq) @@ -1087,11 +1089,17 @@ create: } ; +sp_name: + IDENT_sys '.' IDENT_sys { $$= new sp_name($1, $3); } + | IDENT_sys { $$= new sp_name($1); } + ; + create_function_tail: RETURNS_SYM udf_type UDF_SONAME_SYM TEXT_STRING_sys { LEX *lex=Lex; lex->sql_command = SQLCOM_CREATE_FUNCTION; + lex->udf.name = lex->spname->m_name; lex->udf.returns=(Item_result) $2; lex->udf.dl=$4.str; } @@ -1153,7 +1161,7 @@ create_function_tail: sp_head *sp= lex->sphead; lex->sql_command= SQLCOM_CREATE_SPFUNCTION; - sp->init_strings(YYTHD, lex, &lex->udf.name); + sp->init_strings(YYTHD, lex, lex->spname); /* Restore flag if it was cleared above */ if (sp->m_old_cmq) YYTHD->client_capabilities |= CLIENT_MULTI_QUERIES; @@ -1203,12 +1211,12 @@ sp_suid: ; call: - CALL_SYM IDENT_sys + CALL_SYM sp_name { LEX *lex = Lex; lex->sql_command= SQLCOM_CALL; - lex->udf.name= $2; + lex->spname= $2; lex->value_list.empty(); } '(' sp_cparam_list ')' {} @@ -2723,7 +2731,7 @@ alter: lex->sql_command=SQLCOM_ALTER_DB; lex->name=$3.str; } - | ALTER PROCEDURE ident + | ALTER PROCEDURE sp_name { LEX *lex= Lex; @@ -2736,9 +2744,9 @@ alter: LEX *lex=Lex; lex->sql_command= SQLCOM_ALTER_PROCEDURE; - lex->udf.name= $3; + lex->spname= $3; } - | ALTER FUNCTION_SYM ident + | ALTER FUNCTION_SYM sp_name { LEX *lex= Lex; @@ -2751,7 +2759,7 @@ alter: LEX *lex=Lex; lex->sql_command= SQLCOM_ALTER_FUNCTION; - lex->udf.name= $3; + lex->spname= $3; } ; @@ -3908,12 +3916,13 @@ simple_expr: if (sp_function_exists(YYTHD, &$1)) { LEX *lex= Lex; + sp_name *name= new sp_name($1); - sp_add_fun_to_lex(lex, $1); + sp_add_fun_to_lex(lex, name); if ($3) - $$= new Item_func_sp($1, *$3); + $$= new Item_func_sp(name, *$3); else - $$= new Item_func_sp($1); + $$= new Item_func_sp(name); } else { @@ -4830,19 +4839,19 @@ drop: lex->drop_if_exists=$3; lex->name=$4.str; } - | DROP FUNCTION_SYM if_exists IDENT_sys opt_restrict + | DROP FUNCTION_SYM if_exists sp_name opt_restrict { LEX *lex=Lex; lex->sql_command = SQLCOM_DROP_FUNCTION; lex->drop_if_exists= $3; - lex->udf.name= $4; + lex->spname= $4; } - | DROP PROCEDURE if_exists IDENT_sys opt_restrict + | DROP PROCEDURE if_exists sp_name opt_restrict { LEX *lex=Lex; lex->sql_command = SQLCOM_DROP_PROCEDURE; lex->drop_if_exists= $3; - lex->udf.name= $4; + lex->spname= $4; } | DROP USER { @@ -5321,15 +5330,19 @@ show_param: { Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT; } - | CREATE PROCEDURE ident + | CREATE PROCEDURE sp_name { - Lex->sql_command = SQLCOM_SHOW_CREATE_PROC; - Lex->udf.name= $3; + LEX *lex= Lex; + + lex->sql_command = SQLCOM_SHOW_CREATE_PROC; + lex->spname= $3; } - | CREATE FUNCTION_SYM ident + | CREATE FUNCTION_SYM sp_name { - Lex->sql_command = SQLCOM_SHOW_CREATE_FUNC; - Lex->udf.name= $3; + LEX *lex= Lex; + + lex->sql_command = SQLCOM_SHOW_CREATE_FUNC; + lex->spname= $3; } | PROCEDURE STATUS_SYM wild { |