Files
postgresql/src/test/modules/test_predtest/test_predtest--1.0.sql
Tom Lane 44468f49bb Add test scaffolding for exercising optimizer's predicate-proof logic.
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
2018-03-08 13:25:26 -05:00

17 lines
491 B
SQL

/* src/test/modules/test_predtest/test_predtest--1.0.sql */
-- complain if script is sourced in psql, rather than via CREATE EXTENSION
\echo Use "CREATE EXTENSION test_predtest" to load this file. \quit
CREATE FUNCTION test_predtest(query text,
OUT strong_implied_by bool,
OUT weak_implied_by bool,
OUT strong_refuted_by bool,
OUT weak_refuted_by bool,
OUT s_i_holds bool,
OUT w_i_holds bool,
OUT s_r_holds bool,
OUT w_r_holds bool)
STRICT
AS 'MODULE_PATHNAME' LANGUAGE C;