Re: BUG #17068: Incorrect ordering of a particular row. - Mailing list pgsql-bugs
From | David Rowley |
---|---|
Subject | Re: BUG #17068: Incorrect ordering of a particular row. |
Date | |
Msg-id | CAApHDvr=A5ZMYm-Jy1g4AyfMBeOJGfP_5zJEW9N9k_S5PjwN4Q@mail.gmail.com Whole thread Raw |
In response to | BUG #17068: Incorrect ordering of a particular row. (PG Bug reporting form <noreply@postgresql.org>) |
Responses |
Re: BUG #17068: Incorrect ordering of a particular row.
(Thomas Munro <thomas.munro@gmail.com>)
Re: BUG #17068: Incorrect ordering of a particular row. (David Rowley <dgrowleyml@gmail.com>) |
List | pgsql-bugs |
On Tue, 22 Jun 2021 at 21:39, PG Bug reporting form <noreply@postgresql.org> wrote: > 5 | Nikon > 1 | > 1 | > 1 | > 3 | > 3 | > 3 | > 3 | > 5 | > 4 | > 4 | > 4 | > 4 | > (44 rows) > ``` > > Problem: > `5|` ordering is incorrect. > > Result expected: > `5|` row should be the last row in the output. That seems very bug-like to me. Thanks for reporting it. I've attached an SQL file to make it easier to reproduce. The top-level sort does appear to contain all the correct columns and as far as I can tell the sort operation is using all the correct functions during the comparison. record_cmp() seems to be correctly returning 0 when the final columns being compared are both NULL. Putting some debug inside btint4fastcmp(), it seems to receive: NOTICE: a = 1, b = 3, compare = -1 NOTICE: a = 1, b = 3, compare = -1 NOTICE: a = 1, b = 3, compare = -1 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 1, b = 3, compare = -1 NOTICE: a = 1, b = 3, compare = -1 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 1, b = 3, compare = -1 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 5, b = 3, compare = 1 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 1, b = 1, compare = 0 NOTICE: a = 1, b = 1, compare = 0 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 5, b = 3, compare = 1 NOTICE: a = 1, b = 3, compare = -1 NOTICE: a = 1, b = 3, compare = -1 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 1, b = 3, compare = -1 NOTICE: a = 1, b = 1, compare = 0 NOTICE: a = 1, b = 1, compare = 0 NOTICE: a = 1, b = 1, compare = 0 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 3, b = 1, compare = 1 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 1, b = 3, compare = -1 NOTICE: a = 5, b = 3, compare = 1 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 1, b = 3, compare = -1 NOTICE: a = 1, b = 3, compare = -1 NOTICE: a = 1, b = 1, compare = 0 NOTICE: a = 1, b = 1, compare = 0 NOTICE: a = 3, b = 5, compare = -1 NOTICE: a = 1, b = 3, compare = -1 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 1, b = 3, compare = -1 NOTICE: a = 5, b = 3, compare = 1 NOTICE: a = 1, b = 3, compare = -1 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 4, b = 4, compare = 0 NOTICE: a = 4, b = 4, compare = 0 NOTICE: a = 4, b = 4, compare = 0 NOTICE: a = 1, b = 1, compare = 0 NOTICE: a = 3, b = 5, compare = -1 NOTICE: a = 1, b = 3, compare = -1 NOTICE: a = 5, b = 3, compare = 1 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 1, b = 3, compare = -1 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 1, b = 3, compare = -1 NOTICE: a = 3, b = 3, compare = 0 NOTICE: a = 1, b = 1, compare = 0 NOTICE: a = 1, b = 1, compare = 0 NOTICE: a = 1, b = 1, compare = 0 NOTICE: a = 1, b = 1, compare = 0 It seems a bit fishy that the only 4s that appear here are being compared to 4. How does qsort figure out that 5 > 4 or 4 < 5? David
Attachment
pgsql-bugs by date: