← Back to team overview

maria-developers team mailing list archive

Re: [Commits] Rev 3276: Fix MySQL BUG#12329653 in file:///home/tsk/mprog/src/5.3/

 

Hi!

12 нояб. 2011, в 10:24, <timour@xxxxxxxxxxxx> написал(а):

The patch is OK to push after one small change:

> At file:///home/tsk/mprog/src/5.3/
> 
> ------------------------------------------------------------
> revno: 3276
> revision-id: timour@xxxxxxxxxxxx-20111112082415-7t6jjzdfg35la7aq
> parent: igor@xxxxxxxxxxxx-20111111225326-k11e0durn6kvivly
> committer: timour@xxxxxxxxxxxx
> branch nick: 5.3
> timestamp: Sat 2011-11-12 10:24:15 +0200
> message:
>  Fix MySQL BUG#12329653
> 
>  In MariaDB, when running in ONLY_FULL_GROUP_BY mode,
>  the server produced in incorrect error message that there
>  is an aggregate function without GROUP BY, for artificially
>  created MIN/MAX functions during subquery MIN/MAX optimization.
> 
>  The fix introduces a way to distinguish between artifially
>  created MIN/MAX functions as a result of a rewrite, and normal
>  ones present in the query. The test for ONLY_FULL_GROUP_BY violation
>  now tests in addition if a MIN/MAX function was part of a MIN/MAX
>  subquery rewrite.
> 
>  In order to be able to distinguish these MIN/MAX functions, the
>  patch introduces an additional flag in Item_in_subselect::in_strategy -
>  SUBS_STRATEGY_CHOSEN. This flag is set when the optimizer makes its
>  final choice of a subuqery strategy. In order to make the choice
>  consistent, access to Item_in_subselect::in_strategy is provided
>  via new class methods.
>  ******
>  Fix MySQL BUG#12329653
> 
>  In MariaDB, when running in ONLY_FULL_GROUP_BY mode,
>  the server produced in incorrect error message that there
>  is an aggregate function without GROUP BY, for artificially
>  created MIN/MAX functions during subquery MIN/MAX optimization.
> 
>  The fix introduces a way to distinguish between artifially
>  created MIN/MAX functions as a result of a rewrite, and normal
>  ones present in the query. The test for ONLY_FULL_GROUP_BY violation
>  now tests in addition if a MIN/MAX function was part of a MIN/MAX
>  subquery rewrite.
> 
>  In order to be able to distinguish these MIN/MAX functions, the
>  patch introduces an additional flag in Item_in_subselect::in_strategy -
>  SUBS_STRATEGY_CHOSEN. This flag is set when the optimizer makes its
>  final choice of a subuqery strategy. In order to make the choice
>  consistent, access to Item_in_subselect::in_strategy is provided
>  via new class methods.
> 
[skip]
> @@ -2606,9 +2606,8 @@ bool
> Item_allany_subselect::select_transformer(JOIN *join)
> {
>   DBUG_ENTER("Item_allany_subselect::select_transformer");
> -  DBUG_ASSERT((in_strategy & ~(SUBS_MAXMIN_INJECTED | SUBS_MAXMIN_ENGINE |
> -                               SUBS_IN_TO_EXISTS)) == 0);
> -  in_strategy|= SUBS_IN_TO_EXISTS;
> +//  DBUG_ASSERT((in_strategy & ~(SUBS_MAXMIN_INJECTED | SUBS_MAXMIN_ENGINE |
> +//                               SUBS_IN_TO_EXISTS)) == 0);
>   if (upper_item)
>     upper_item->show= 1;
>   DBUG_RETURN(select_in_like_transformer(join));
> @@ -2617,7 +2616,7 @@ Item_allany_subselect::select_transforme

Remove the comment, but better change it to:
DBUG_ASSERT((in_strategy & ~(SUBS_MAXMIN_INJECTED | SUBS_MAXMIN_ENGINE |
                             SUBS_IN_TO_EXISTS | SUBS_STRATEGY_CHOSEN)) == 0);

[skip]