On Tue, Apr 19, 2022 at 12:30 PM David Rowley <dgrowle...@gmail.com> wrote: > > Thanks for looking at this. > > On Tue, 19 Apr 2022 at 02:11, John Naylor <john.nay...@enterprisedb.com> > wrote: > > IIUC, this function is called by tuplesort_begin_common, which in turn > > is called by tuplesort_begin_{heap, indexes, etc}. The latter callers > > set the onlyKey and now oneKeySort variables as appropriate, and > > sometimes hard-coded to false. Is it intentional to set them here > > first? > > > > Falling under the polish that you were likely thinking of above: > > I did put the patch together quickly just for the benchmark and at the > time I was subtly aware that the onlyKey field was being set using a > similar condition as I was using to set the boolean field I'd added. > On reflection today, it should be fine just to check if that field is > NULL or not in the 3 new comparison functions. Similarly to before, > this only needs to be done if the datums compare equally, so does not > add any code to the path where the datums are non-equal. It looks > like the other tuplesort_begin_* functions use a different comparison > function that will never make use of the specialization comparison > functions added by 697492434.
Okay, this makes logical sense and is a smaller patch to boot. I've re-run my tests (attached) to make sure we have our bases covered. I'm sharing the min-of-five, as before, but locally I tried . The regression is fixed, and most other differences from v15 seem to be noise. It's possible the naturally fastest cases (pre-sorted ints and bigints) are slower than v15-revert than expected from noise, but it's not clear. I think this is good to go. -- John Naylor EDB: http://www.enterprisedb.com
qsort-fix-regression-jcn2.ods
Description: application/vnd.oasis.opendocument.spreadsheet