• Tom Lane's avatar
    Clean up manipulations of hash indexes' hasho_flag field. · 2040bb4a
    Tom Lane authored
    Standardize on testing a hash index page's type by doing
    	(opaque->hasho_flag & LH_PAGE_TYPE) == LH_xxx_PAGE
    Various places were taking shortcuts like
    	opaque->hasho_flag & LH_BUCKET_PAGE
    which while not actually wrong, is still bad practice because
    it encourages use of
    	opaque->hasho_flag & LH_UNUSED_PAGE
    which *is* wrong (LH_UNUSED_PAGE == 0, so the above is constant false).
    hash_xlog.c's hash_mask() contained such an incorrect test.
    
    This also ensures that we mask out the additional flag bits that
    hasho_flag has accreted since 9.6.  pgstattuple's pgstat_hash_page(),
    for one, was failing to do that and was thus actively broken.
    
    Also fix assorted comments that hadn't been updated to reflect the
    extended usage of hasho_flag, and fix some macros that were testing
    just "(hasho_flag & bit)" to use the less dangerous, project-approved
    form "((hasho_flag & bit) != 0)".
    
    Coverity found the bug in hash_mask(); I noted the one in
    pgstat_hash_page() through code reading.
    2040bb4a
hashutil.c 15.3 KB