diff options
Diffstat (limited to 'src/backend/optimizer/util/restrictinfo.c')
-rw-r--r-- | src/backend/optimizer/util/restrictinfo.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/backend/optimizer/util/restrictinfo.c b/src/backend/optimizer/util/restrictinfo.c index d6d26a2b515..c1fbbb6bfee 100644 --- a/src/backend/optimizer/util/restrictinfo.c +++ b/src/backend/optimizer/util/restrictinfo.c @@ -550,6 +550,36 @@ extract_actual_join_clauses(List *restrictinfo_list, } /* + * has_pseudoconstant_clauses + * + * Returns true if 'restrictinfo_list' includes pseudoconstant clauses. + * + * This is used when we determine whether to allow extensions to consider + * pushing down joins in add_paths_to_joinrel(). + */ +bool +has_pseudoconstant_clauses(PlannerInfo *root, + List *restrictinfo_list) +{ + ListCell *l; + + /* No need to look if we know there are no pseudoconstants */ + if (!root->hasPseudoConstantQuals) + return false; + + /* See if there are pseudoconstants in the RestrictInfo list */ + foreach(l, restrictinfo_list) + { + RestrictInfo *rinfo = lfirst_node(RestrictInfo, l); + + if (rinfo->pseudoconstant && + !rinfo_is_constant_true(rinfo)) + return true; + } + return false; +} + +/* * join_clause_is_movable_to * Test whether a join clause is a safe candidate for parameterization * of a scan on the specified base relation. |