• Tom Lane's avatar
    Revise the planner's handling of "pseudoconstant" WHERE clauses, that is · cffd89ca
    Tom Lane authored
    clauses containing no variables and no volatile functions.  Such a clause
    can be used as a one-time qual in a gating Result plan node, to suppress
    plan execution entirely when it is false.  Even when the clause is true,
    putting it in a gating node wins by avoiding repeated evaluation of the
    clause.  In previous PG releases, query_planner() would do this for
    pseudoconstant clauses appearing at the top level of the jointree, but
    there was no ability to generate a gating Result deeper in the plan tree.
    To fix it, get rid of the special case in query_planner(), and instead
    process pseudoconstant clauses through the normal RestrictInfo qual
    distribution mechanism.  When a pseudoconstant clause is found attached to
    a path node in create_plan(), pull it out and generate a gating Result at
    that point.  This requires special-casing pseudoconstants in selectivity
    estimation and cost_qual_eval, but on the whole it's pretty clean.
    It probably even makes the planner a bit faster than before for the normal
    case of no pseudoconstants, since removing pull_constant_clauses saves one
    useless traversal of the qual tree.  Per gripe from Phil Frost.
    cffd89ca
README 29.3 KB