summaryrefslogtreecommitdiff
path: root/sql/sql_yacc.yy
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.org>2016-10-08 11:50:18 +0400
committerAlexander Barkov <bar@mariadb.org>2016-10-08 11:50:18 +0400
commit4c45b820aa0e04fd25527279175fdc7fabcd731e (patch)
treee52297dbbe7798cc21aabc4e747467bad78e1e79 /sql/sql_yacc.yy
parent8ea2e143f09bd0602ffd9695a78c076d483dd65a (diff)
downloadmariadb-git-4c45b820aa0e04fd25527279175fdc7fabcd731e.tar.gz
MDEV-10709 Expressions as parameters to Dynamic SQL
Diffstat (limited to 'sql/sql_yacc.yy')
-rw-r--r--sql/sql_yacc.yy16
1 files changed, 10 insertions, 6 deletions
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index 4a88c1f2ddf..0da0b442946 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -2255,7 +2255,14 @@ execute:
execute_using:
/* nothing */
- | USING execute_var_list
+ | USING { Lex->expr_allows_subselect= false; }
+ execute_var_list
+ {
+ if (Lex->table_or_sp_used())
+ my_yyabort_error((ER_SUBQUERIES_NOT_SUPPORTED, MYF(0),
+ "EXECUTE..USING"));
+ Lex->expr_allows_subselect= true;
+ }
;
execute_var_list:
@@ -2264,12 +2271,9 @@ execute_var_list:
;
execute_var_ident:
- '@' ident_or_text
+ expr
{
- LEX *lex=Lex;
- LEX_STRING *lexstr= (LEX_STRING*)thd->memdup(&$2, sizeof(LEX_STRING));
- if (!lexstr || lex->prepared_stmt_params.push_back(lexstr,
- thd->mem_root))
+ if (Lex->prepared_stmt_params.push_back($1, thd->mem_root))
MYSQL_YYABORT;
}
;