106 Index security_level,
113 restrictinfo->
clause = clause;
114 restrictinfo->orclause = orclause;
116 restrictinfo->pseudoconstant = pseudoconstant;
119 restrictinfo->can_join =
false;
128 if (security_level > 0)
131 restrictinfo->leakproof =
false;
149 restrictinfo->clause_relids =
bms_union(restrictinfo->left_relids,
150 restrictinfo->right_relids);
161 restrictinfo->right_relids))
163 restrictinfo->can_join =
true;
165 Assert(!restrictinfo->pseudoconstant);
171 restrictinfo->left_relids = NULL;
172 restrictinfo->right_relids = NULL;
178 if (required_relids != NULL)
209 restrictinfo->parent_ec = NULL;
211 restrictinfo->eval_cost.startup = -1;
212 restrictinfo->norm_selec = -1;
213 restrictinfo->outer_selec = -1;
215 restrictinfo->mergeopfamilies =
NIL;
217 restrictinfo->left_ec = NULL;
218 restrictinfo->right_ec = NULL;
219 restrictinfo->left_em = NULL;
220 restrictinfo->right_em = NULL;
221 restrictinfo->scansel_cache =
NIL;
223 restrictinfo->outer_is_left =
false;
227 restrictinfo->left_bucketsize = -1;
228 restrictinfo->right_bucketsize = -1;
229 restrictinfo->left_mcvfreq = -1;
230 restrictinfo->right_mcvfreq = -1;
232 restrictinfo->left_hasheqoperator =
InvalidOid;
233 restrictinfo->right_hasheqoperator =
InvalidOid;
260 Index security_level,
339 memcpy(newclause, clause,
sizeof(
OpExpr));
342 newclause->
opno = comm_op;
358 result->left_relids = rinfo->right_relids;
359 result->right_relids = rinfo->left_relids;
360 Assert(result->orclause == NULL);
361 result->left_ec = rinfo->right_ec;
362 result->right_ec = rinfo->left_ec;
363 result->left_em = rinfo->right_em;
364 result->right_em = rinfo->left_em;
365 result->scansel_cache =
NIL;
366 if (rinfo->hashjoinoperator == clause->
opno)
367 result->hashjoinoperator = comm_op;
370 result->left_bucketsize = rinfo->right_bucketsize;
371 result->right_bucketsize = rinfo->left_bucketsize;
372 result->left_mcvfreq = rinfo->right_mcvfreq;
373 result->right_mcvfreq = rinfo->left_mcvfreq;
388 if (restrictinfo->orclause != NULL)
409 restrictinfo->leakproof)
444 foreach(l, restrictinfo_list)
448 Assert(!rinfo->pseudoconstant);
470 foreach(l, restrictinfo_list)
474 if (rinfo->pseudoconstant == pseudoconstant &&
502 foreach(l, restrictinfo_list)
508 if (!rinfo->pseudoconstant &&
515 Assert(!rinfo->pseudoconstant);
702 if (!
bms_overlap(currentrelids, rinfo->clause_relids))
bool bms_is_subset(const Bitmapset *a, const Bitmapset *b)
void bms_free(Bitmapset *a)
int bms_num_members(const Bitmapset *a)
bool bms_is_member(int x, const Bitmapset *a)
Bitmapset * bms_union(const Bitmapset *a, const Bitmapset *b)
Bitmapset * bms_difference(const Bitmapset *a, const Bitmapset *b)
bool bms_overlap(const Bitmapset *a, const Bitmapset *b)
bool contain_leaked_vars(Node *clause)
Assert(fmt[strlen(fmt) - 1] !='\n')
List * lappend(List *list, void *datum)
Expr * make_andclause(List *andclauses)
Expr * make_orclause(List *orclauses)
static bool is_andclause(const void *clause)
static bool is_orclause(const void *clause)
static bool is_opclause(const void *clause)
static Node * get_rightop(const void *clause)
static Node * get_leftop(const void *clause)
#define IsA(nodeptr, _type_)
#define castNode(_type_, nodeptr)
#define RINFO_IS_PUSHED_DOWN(rinfo, joinrelids)
#define lfirst_node(type, lc)
static int list_length(const List *l)
#define list_make2(x1, x2)
static bool DatumGetBool(Datum X)
List * get_actual_clauses(List *restrictinfo_list)
bool restriction_is_or_clause(RestrictInfo *restrictinfo)
void extract_actual_join_clauses(List *restrictinfo_list, Relids joinrelids, List **joinquals, List **otherquals)
RestrictInfo * commute_restrictinfo(RestrictInfo *rinfo, Oid comm_op)
bool restriction_is_securely_promotable(RestrictInfo *restrictinfo, RelOptInfo *rel)
bool join_clause_is_movable_into(RestrictInfo *rinfo, Relids currentrelids, Relids current_and_outer)
List * extract_actual_clauses(List *restrictinfo_list, bool pseudoconstant)
RestrictInfo * make_restrictinfo(PlannerInfo *root, Expr *clause, bool is_pushed_down, bool pseudoconstant, Index security_level, Relids required_relids, Relids outer_relids)
bool join_clause_is_movable_to(RestrictInfo *rinfo, RelOptInfo *baserel)
static RestrictInfo * make_restrictinfo_internal(PlannerInfo *root, Expr *clause, Expr *orclause, bool is_pushed_down, bool pseudoconstant, Index security_level, Relids required_relids, Relids outer_relids)
static Expr * make_sub_restrictinfos(PlannerInfo *root, Expr *clause, bool is_pushed_down, bool pseudoconstant, Index security_level, Relids required_relids, Relids outer_relids)
bool clause_is_computable_at(PlannerInfo *root, Relids clause_relids, Relids eval_relids)
static bool rinfo_is_constant_true(RestrictInfo *rinfo)
Relids lateral_referencers
Index baserestrict_min_security
Relids pull_varnos(PlannerInfo *root, Node *node)