• unknown's avatar
    Bug #22342: No results returned for query using max and group by · decf9082
    unknown authored
     When using index for group by and range access the server isolates    
     a set of ranges based on the conditions over the key parts of the
     index used. Then it uses only the ranges over the GROUP BY fields to
     jump from one group to another. Since the GROUP BY fields may form a
     prefix over the index, we may use only a prefix of the ranges produced
     by the range optimizer.
     Each range contains a notion on whether it includes its border values.
     The problem is that when using a range prefix, the last range is open
     because it assumes that there is a range on the next keypart. Thus when
     we use a prefix range as it is, it excludes all border values.
     The solution is when ignoring the suffix of the range conditions 
     (to jump over the GROUP BY prefix only) the server must change the 
     remaining intervals so they always contain their borders, e.g. 
     if the whole range was :
     (1,-inf) <= (<group_by_col>,<min_max_arg_col>) < (1, 3) we must make
     (1) <= (<group_by_col>) <= (1) because (a,b) < (c1,c2) means :
     a < c1 OR (a = c1 AND b < c2).
    
    
    mysql-test/r/group_min_max.result:
      Bug #22342: No results returned for query using max and group by
       - test case
    mysql-test/t/group_min_max.test:
      Bug #22342: No results returned for query using max and group by
       - test case
    sql/opt_range.cc:
      Bug #22342: No results returned for query using max and group by
       - open the intervals for prefix select when there are more conditions
         than used for the prefix search.
    sql/opt_range.h:
      Bug #22342: No results returned for query using max and group by
       - open the intervals for prefix select when there are more conditions
         than used for the prefix search.
    decf9082
group_min_max.test 43 KB