• Tom Lane's avatar
    Fix logical errors in constraint exclusion: we cannot assume that a CHECK · 208d0a23
    Tom Lane authored
    constraint yields TRUE for every row of its table, only that it does not
    yield FALSE (a NULL result isn't disallowed).  This breaks a couple of
    implications that would be true in two-valued logic.  I had put in one such
    mistake in an 8.2.5 patch: foo IS NULL doesn't refute a strict operator
    on foo.  But there was another in the original 8.2 release: NOT foo doesn't
    refute an expression whose truth would imply the truth of foo.
    Per report from Rajesh Kumar Mallah.
    
    To preserve the ability to do constraint exclusion with one partition
    holding NULL values, extend relation_excluded_by_constraints() to check
    for attnotnull flags, and add col IS NOT NULL expressions to the set of
    constraints we hope to refute.
    208d0a23
predtest.c 43.5 KB