• Tom Lane's avatar
    Redesign the API for list sorting (list_qsort becomes list_sort). · 569ed7f4
    Tom Lane authored
    In the wake of commit 1cff1b95, the obvious way to sort a List
    is to apply qsort() directly to the array of ListCells.  list_qsort
    was building an intermediate array of pointers-to-ListCells, which
    we no longer need, but getting rid of it forces an API change:
    the comparator functions need to do one less level of indirection.
    
    Since we're having to touch the callers anyway, let's do two additional
    changes: sort the given list in-place rather than making a copy (as
    none of the existing callers have any use for the copying behavior),
    and rename list_qsort to list_sort.  It was argued that the old name
    exposes more about the implementation than it should, which I find
    pretty questionable, but a better reason to rename it is to be sure
    we get the attention of any external callers about the need to fix
    their comparator functions.
    
    While we're at it, change four existing callers of qsort() to use
    list_sort instead; previously, they all had local reinventions
    of list_qsort, ie build-an-array-from-a-List-and-qsort-it.
    (There are some other places where changing to list_sort perhaps
    would be worthwhile, but they're less obviously wins.)
    
    Discussion: https://postgr.es/m/29361.1563220190@sss.pgh.pa.us
    569ed7f4
rowsecurity.c 24.9 KB