• holyfoot/hf@mysql.com/hfmain.(none)'s avatar
    Bug #31890 Partitions: ORDER BY DESC in InnoDB not working. · a2f08506
    holyfoot/hf@mysql.com/hfmain.(none) authored
    It's not InnoDB specific bug.
    Error is in QUEUE code, about the way we handle queue->max_at_top.
    It's either '0' or '-2' and we do '^' operation to get the proper
    direction. Though queue->compare() function can return '-2' as
    a result of comparison sometimes. So we'll get
    queue->compare() ^ queue->max_at_top == 0 (when max_at_top is -2)
    and _downheap() function code will go wrong way here:
    ...
        if (next_index < elements &&
            (queue->compare(queue->first_cmp_arg,
                            queue->root[next_index]+offset_to_key,
                            queue->root[next_index+1]+offset_to_key) ^
             queue->max_at_top) > 0)
          next_index++;
    ...
    
    Fixed by changing max_at_top to be either 1 or -1, doing
    '* max_at_top' to get proper direction.
    a2f08506
queues.h 2.6 KB