• Tomas Vondra's avatar
    Fix handling of NULLs in MCV items and constants · e4deae73
    Tomas Vondra authored
    There were two issues in how the extended statistics handled NULL values
    in opclauses. Firstly, the code was oblivious to the possibility that
    Const may be NULL (constisnull=true) in which case the constvalue is
    undefined. We need to treat this as a mismatch, and not call the proc.
    
    Secondly, the MCV item itself may contain NULL values too - the code
    already did check that, and updated the match bitmap accordingly, but
    failed to ensure we won't call the operator procedure anyway. It did
    work for AND-clauses, because in that case false in the bitmap stops
    evaluation of further clauses. But for OR-clauses ir was not easy to
    get incorrect estimates or even trigger a crash.
    
    This fixes both issues by extending the existing check so that it looks
    at constisnull too, and making sure it skips calling the procedure.
    
    Discussion: https://postgr.es/m/8736jdhbhc.fsf%40ansel.ydns.eu
    e4deae73
stats_ext.out 25.5 KB