#include "nodes/primnodes.h"

Go to the source code of this file.
Functions | |
| bool | predicate_implied_by (List *predicate_list, List *restrictinfo_list) |
| bool | predicate_refuted_by (List *predicate_list, List *restrictinfo_list) |
Definition at line 124 of file predtest.c.
References linitial, list_length(), NIL, and predicate_implied_by_recurse().
Referenced by add_predicate_to_quals(), build_paths_for_OR(), check_partial_indexes(), choose_bitmap_and(), create_bitmap_scan_plan(), create_bitmap_subplan(), create_indexscan_plan(), gincostestimate(), and make_restrictinfo_from_bitmapqual().
{
Node *p,
*r;
if (predicate_list == NIL)
return true; /* no predicate: implication is vacuous */
if (restrictinfo_list == NIL)
return false; /* no restriction: implication must fail */
/*
* If either input is a single-element list, replace it with its lone
* member; this avoids one useless level of AND-recursion. We only need
* to worry about this at top level, since eval_const_expressions should
* have gotten rid of any trivial ANDs or ORs below that.
*/
if (list_length(predicate_list) == 1)
p = (Node *) linitial(predicate_list);
else
p = (Node *) predicate_list;
if (list_length(restrictinfo_list) == 1)
r = (Node *) linitial(restrictinfo_list);
else
r = (Node *) restrictinfo_list;
/* And away we go ... */
return predicate_implied_by_recurse(r, p);
}
Definition at line 182 of file predtest.c.
References linitial, list_length(), NIL, and predicate_refuted_by_recurse().
Referenced by relation_excluded_by_constraints().
{
Node *p,
*r;
if (predicate_list == NIL)
return false; /* no predicate: no refutation is possible */
if (restrictinfo_list == NIL)
return false; /* no restriction: refutation must fail */
/*
* If either input is a single-element list, replace it with its lone
* member; this avoids one useless level of AND-recursion. We only need
* to worry about this at top level, since eval_const_expressions should
* have gotten rid of any trivial ANDs or ORs below that.
*/
if (list_length(predicate_list) == 1)
p = (Node *) linitial(predicate_list);
else
p = (Node *) predicate_list;
if (list_length(restrictinfo_list) == 1)
r = (Node *) linitial(restrictinfo_list);
else
r = (Node *) restrictinfo_list;
/* And away we go ... */
return predicate_refuted_by_recurse(r, p);
}
1.7.1