summaryrefslogtreecommitdiff
path: root/sql/sql_yacc.yy
diff options
context:
space:
mode:
authorbell@sanja.is.com.ua <>2003-09-13 17:47:59 +0300
committerbell@sanja.is.com.ua <>2003-09-13 17:47:59 +0300
commit85547962525f3de479dca367c3bbd2a203023cae (patch)
treea3c9c07d2cdb16d8472b0fd27ea2edbe9f55cfe3 /sql/sql_yacc.yy
parent08e5a7e135254ce4c41e0bad2821a5245148fd99 (diff)
downloadmariadb-git-85547962525f3de479dca367c3bbd2a203023cae.tar.gz
new UDF arguments interface (WL#1017) (SCRUM)
Diffstat (limited to 'sql/sql_yacc.yy')
-rw-r--r--sql/sql_yacc.yy44
1 files changed, 39 insertions, 5 deletions
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index a8ee9f28fda..0a7511fa872 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -630,13 +630,14 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
%type <item>
literal text_literal insert_ident order_ident
simple_ident select_item2 expr opt_expr opt_else sum_expr in_sum_expr
- table_wild no_in_expr expr_expr simple_expr no_and_expr
+ table_wild no_in_expr expr_expr simple_expr no_and_expr udf_expr
using_list expr_or_default set_expr_or_default interval_expr
param_marker singlerow_subselect singlerow_subselect_init
exists_subselect exists_subselect_init sp_opt_default
%type <item_list>
- expr_list udf_expr_list when_list ident_list ident_list_arg
+ expr_list sp_expr_list udf_expr_list udf_expr_list2 when_list
+ ident_list ident_list_arg
%type <key_type>
key_type opt_unique_or_fulltext
@@ -702,7 +703,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize);
select_item_list select_item values_list no_braces
opt_limit_clause delete_limit_clause fields opt_values values
procedure_list procedure_list2 procedure_item
- when_list2 expr_list2 handler
+ when_list2 expr_list2 udf_expr_list3 handler
opt_precision opt_ignore opt_column opt_restrict
grant revoke set lock unlock string_list field_options field_option
field_opt_list opt_binary table_lock_list table_lock
@@ -3246,7 +3247,7 @@ simple_expr:
{ $$= new Item_func_round($3,$5,1); }
| TRUE_SYM
{ $$= new Item_int((char*) "TRUE",1,1); }
- | SP_FUNC '(' udf_expr_list ')'
+ | SP_FUNC '(' sp_expr_list ')'
{
sp_add_fun_to_lex(Lex, $1);
if ($3)
@@ -3336,10 +3337,43 @@ simple_expr:
| EXTRACT_SYM '(' interval FROM expr ')'
{ $$=new Item_extract( $3, $5); };
-udf_expr_list:
+sp_expr_list:
/* empty */ { $$= NULL; }
| expr_list { $$= $1;};
+udf_expr_list:
+ /* empty */ { $$= NULL; }
+ | udf_expr_list2 { $$= $1;}
+ ;
+
+udf_expr_list2:
+ { Select->expr_list.push_front(new List<Item>); }
+ udf_expr_list3
+ { $$= Select->expr_list.pop(); }
+ ;
+
+udf_expr_list3:
+ udf_expr
+ {
+ Select->expr_list.head()->push_back($1);
+ }
+ | udf_expr_list3 ',' udf_expr
+ {
+ Select->expr_list.head()->push_back($3);
+ }
+ ;
+
+udf_expr:
+ remember_name expr remember_end select_alias
+ {
+ if ($4.str)
+ $2->set_name($4.str,$4.length,system_charset_info);
+ else
+ $2->set_name($1,(uint) ($3 - $1), YYTHD->charset());
+ $$= $2;
+ }
+ ;
+
sum_expr:
AVG_SYM '(' in_sum_expr ')'
{ $$=new Item_sum_avg($3); }