Commit 6367a2c6 authored by unknown's avatar unknown

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).
parent 5cf25d80
...@@ -644,7 +644,8 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); ...@@ -644,7 +644,8 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
NUM_literal NUM_literal
%type <item_list> %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> %type <key_type>
key_type opt_unique_or_fulltext constraint_key_type key_type opt_unique_or_fulltext constraint_key_type
...@@ -3137,21 +3138,21 @@ simple_expr: ...@@ -3137,21 +3138,21 @@ simple_expr:
{ $$= new Item_func_trim($5,$3); } { $$= new Item_func_trim($5,$3); }
| TRUNCATE_SYM '(' expr ',' expr ')' | TRUNCATE_SYM '(' expr ',' expr ')'
{ $$= new Item_func_round($3,$5,1); } { $$= new Item_func_round($3,$5,1); }
| UDA_CHAR_SUM '(' udf_expr_list ')' | UDA_CHAR_SUM '(' udf_sum_expr_list ')'
{ {
if ($3 != NULL) if ($3 != NULL)
$$ = new Item_sum_udf_str($1, *$3); $$ = new Item_sum_udf_str($1, *$3);
else else
$$ = new Item_sum_udf_str($1); $$ = new Item_sum_udf_str($1);
} }
| UDA_FLOAT_SUM '(' udf_expr_list ')' | UDA_FLOAT_SUM '(' udf_sum_expr_list ')'
{ {
if ($3 != NULL) if ($3 != NULL)
$$ = new Item_sum_udf_float($1, *$3); $$ = new Item_sum_udf_float($1, *$3);
else else
$$ = new Item_sum_udf_float($1); $$ = new Item_sum_udf_float($1);
} }
| UDA_INT_SUM '(' udf_expr_list ')' | UDA_INT_SUM '(' udf_sum_expr_list ')'
{ {
if ($3 != NULL) if ($3 != NULL)
$$ = new Item_sum_udf_int($1, *$3); $$ = new Item_sum_udf_int($1, *$3);
...@@ -3289,6 +3290,21 @@ udf_expr_list: ...@@ -3289,6 +3290,21 @@ udf_expr_list:
/* empty */ { $$= NULL; } /* empty */ { $$= NULL; }
| expr_list { $$= $1;}; | 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: sum_expr:
AVG_SYM '(' in_sum_expr ')' AVG_SYM '(' in_sum_expr ')'
{ $$=new Item_sum_avg($3); } { $$=new Item_sum_avg($3); }
......
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