mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
a fix (#11553: gives error if aggregate user-defined function in HAVING clause).
sql/sql_yacc.yy: a fix (#11553: gives error if aggregate user-defined function in HAVING clause). udf_sum_expr_list rule introduced and used for aggregate udf functions: - call inc_in_sum_expr() before udf_expr_list parsing (as in_sum_expr rule does).
This commit is contained in:
parent
5cf25d8019
commit
6367a2c631
1 changed files with 20 additions and 4 deletions
|
@ -644,7 +644,8 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
|
|||
NUM_literal
|
||||
|
||||
%type <item_list>
|
||||
expr_list udf_expr_list when_list ident_list ident_list_arg
|
||||
expr_list udf_expr_list udf_sum_expr_list when_list ident_list
|
||||
ident_list_arg
|
||||
|
||||
%type <key_type>
|
||||
key_type opt_unique_or_fulltext constraint_key_type
|
||||
|
@ -3137,21 +3138,21 @@ simple_expr:
|
|||
{ $$= new Item_func_trim($5,$3); }
|
||||
| TRUNCATE_SYM '(' expr ',' expr ')'
|
||||
{ $$= new Item_func_round($3,$5,1); }
|
||||
| UDA_CHAR_SUM '(' udf_expr_list ')'
|
||||
| UDA_CHAR_SUM '(' udf_sum_expr_list ')'
|
||||
{
|
||||
if ($3 != NULL)
|
||||
$$ = new Item_sum_udf_str($1, *$3);
|
||||
else
|
||||
$$ = new Item_sum_udf_str($1);
|
||||
}
|
||||
| UDA_FLOAT_SUM '(' udf_expr_list ')'
|
||||
| UDA_FLOAT_SUM '(' udf_sum_expr_list ')'
|
||||
{
|
||||
if ($3 != NULL)
|
||||
$$ = new Item_sum_udf_float($1, *$3);
|
||||
else
|
||||
$$ = new Item_sum_udf_float($1);
|
||||
}
|
||||
| UDA_INT_SUM '(' udf_expr_list ')'
|
||||
| UDA_INT_SUM '(' udf_sum_expr_list ')'
|
||||
{
|
||||
if ($3 != NULL)
|
||||
$$ = new Item_sum_udf_int($1, *$3);
|
||||
|
@ -3289,6 +3290,21 @@ udf_expr_list:
|
|||
/* empty */ { $$= NULL; }
|
||||
| expr_list { $$= $1;};
|
||||
|
||||
udf_sum_expr_list:
|
||||
{
|
||||
LEX *lex= Lex;
|
||||
if (lex->current_select->inc_in_sum_expr())
|
||||
{
|
||||
yyerror(ER(ER_SYNTAX_ERROR));
|
||||
YYABORT;
|
||||
}
|
||||
}
|
||||
udf_expr_list
|
||||
{
|
||||
Select->in_sum_expr--;
|
||||
$$= $2;
|
||||
};
|
||||
|
||||
sum_expr:
|
||||
AVG_SYM '(' in_sum_expr ')'
|
||||
{ $$=new Item_sum_avg($3); }
|
||||
|
|
Loading…
Reference in a new issue