• Tom Lane's avatar
    Fix more confusion in SP-GiST. · dfc843d4
    Tom Lane authored
    spg_box_quad_leaf_consistent unconditionally returned the leaf
    datum as leafValue, even though in its usage for poly_ops that
    value is of completely the wrong type.
    
    In versions before 12, that was harmless because the core code did
    nothing with leafValue in non-index-only scans ... but since commit
    2a636834, if we were doing a KNN-style scan, spgNewHeapItem would
    unconditionally try to copy the value using the wrong datatype
    parameters.  Said copying is a waste of time and space if we're not
    going to return the data, but it accidentally failed to fail until
    I fixed the datatype confusion in ac9099fc.
    
    Hence, change spgNewHeapItem to not copy the datum unless we're
    actually going to return it later.  This saves cycles and dodges
    the question of whether lossy opclasses are returning the right
    type.  Also change spg_box_quad_leaf_consistent to not return
    data that might be of the wrong type, as insurance against
    somebody introducing a similar bug into the core code in future.
    
    It seems like a good idea to back-patch these two changes into
    v12 and v13, although I'm afraid to change spgNewHeapItem's
    mistaken idea of which datatype to use in those branches.
    
    Per buildfarm results from ac9099fc.
    
    Discussion: https://postgr.es/m/3728741.1617381471@sss.pgh.pa.us
    dfc843d4
spgscan.c 27.2 KB