• Tom Lane's avatar
    Add test scaffolding for exercising optimizer's predicate-proof logic. · 44468f49
    Tom Lane authored
    The predicate-proof code in predtest.c is a bit hard to test as-is:
    you have to construct a query whose plan changes depending on the success
    of a test, and in tests that have been around for awhile, it's always
    possible that the plan shape is now being determined by some other factor.
    Our existing regression tests aren't doing real well at providing full
    code coverage of predtest.c, either.  So, let's add a small test module
    that allows directly inspecting the results of predicate_implied_by()
    and predicate_refuted_by() for arbitrary boolean expressions.
    
    I chose the set of tests committed here in order to get reasonably
    complete code coverage of predtest.c just from running this test
    module, and to cover some cases called out as being interesting in
    the existing comments.  We might want to add more later.  But this
    set already shows a few cases where perhaps things could be improved.
    
    Indeed, this exercise proves that predicate_refuted_by() is buggy for
    the case of clause_is_check = true, though fortunately we aren't using
    that case anywhere yet.  I'll look into doing something about that in
    a separate commit.  For now, just memorialize the current behavior.
    
    Discussion: https://postgr.es/m/5983.1520487191@sss.pgh.pa.us
    44468f49
test_predtest.out 15.3 KB