128 Index security_level,
132 Relids incompatible_relids,
140 Index security_level,
144 Relids incompatible_relids,
204 elog(
ERROR,
"unrecognized node type: %d",
220 for (rti = 1; rti <
root->simple_rel_array_size; rti++)
262 if (tlist_vars !=
NIL)
272 if (
root->parse->havingQual)
323 if (rel->attr_needed[attno] ==
NULL)
333 var->varnullingrels =
NULL;
447 if (
parse->groupingSets)
461 foreach(
lc,
root->processed_groupClause)
496 info->
coll = var->varcollid;
542 rel =
root->simple_rel_array[relid];
568 for (
int i = 0;
i <
index->nkeycolumns;
i++)
583 if (!
index->nullsnotdistinct &&
667 foreach(
lc,
root->processed_groupClause)
706 if (!
root->processed_groupClause)
712 if (
root->parse->groupingSets)
718 if (
root->numOrderedAggs > 0)
726 if (
root->hasNonPartialAggs ||
root->hasNonSerialAggs)
733 if (
root->parse->hasTargetSRFs)
760 if (
root->agg_clause_list ==
NIL)
785 foreach(
lc,
root->aggtransinfos)
824 if (
root->parse->havingQual !=
NULL)
880 if (
root->qual_security_level > 0 &&
903 ac_info->agg_eval_at = agg_eval_at;
913 root->agg_clause_list = agg_clause_list;
914 root->tlist_vars = tlist_vars;
943 foreach(
lc,
root->processed_groupClause)
1009 ge_info->sortgroupref = sortgroupref;
1038 &opfamily, &opcintype, &cmptype))
1039 elog(
ERROR,
"operator %u is not a valid ordering operator",
1056 elog(
ERROR,
"missing operator %d(%u,%u) in opfamily %u",
1060 elog(
ERROR,
"could not find opfamilies for equality operator %u",
1065 collation,
sgc->tleSortGroupRef,
1101 if (!
root->hasLateralRTEs)
1107 for (rti = 1; rti <
root->simple_rel_array_size; rti++)
1193 int levelsup =
phv->phlevelsup;
1250 if (!
root->hasLateralRTEs)
1254 for (rti = 1; rti <
root->simple_rel_array_size; rti++)
1268 if (
brel->lateral_vars ==
NIL)
1290 if (!
root->hasLateralRTEs)
1299 for (rti = 1; rti <
root->simple_rel_array_size; rti++)
1314 lateral_relids =
NULL;
1317 foreach(
lc,
brel->lateral_vars)
1343 brel->direct_lateral_relids = lateral_relids;
1360 foreach(
lc,
root->placeholder_list)
1386 brel->direct_lateral_relids =
1389 brel->lateral_relids =
1415 root->hasLateralRTEs =
false;
1430 for (rti = 1; rti <
root->simple_rel_array_size; rti++)
1464 for (rti = 1; rti <
root->simple_rel_array_size; rti++)
1474 lateral_relids =
brel->lateral_relids;
1491 brel2->lateral_referencers =
1534 root->placeholdersFrozen =
true;
1571 if (
root->join_info_list)
1698 switch (
j->jointype)
1748 if (
j->rtindex != 0)
1842 elog(
ERROR,
"unrecognized join type: %d",
1883 elog(
ERROR,
"unrecognized node type: %d",
1911 if (
root->qual_security_level > 0)
1927 root->qual_security_level,
1939 root->qual_security_level,
2021 root->qual_security_level,
2035 elog(
ERROR,
"unrecognized node type: %d",
2058 Index security_level = 0;
2067 foreach(
lc,
rte->securityQuals)
2114 if (relid ==
root->group_rtindex)
2183 foreach(l,
root->parse->rowMarks)
2193 errmsg(
"%s cannot be applied to the nullable side of an outer join",
2254 commute_below_l = commute_below_r =
NULL;
2255 foreach(l,
root->join_info_list)
2411 foreach(l,
root->placeholder_list)
2431 min_lefthand =
bms_copy(left_rels);
2433 min_righthand =
bms_copy(right_rels);
2457 if (commute_below_l || commute_below_r)
2462 foreach(l,
root->join_info_list)
2488 List *semi_operators;
2489 List *semi_rhs_exprs;
2530 semi_operators =
NIL;
2531 semi_rhs_exprs =
NIL;
2630 semi_operators =
lappend_oid(semi_operators, opno);
2635 if (semi_rhs_exprs ==
NIL)
2719 quals =
jtitem->oj_joinclauses;
2839 is_clone = !has_clone;
2844 root->qual_security_level,
2882 root->qual_security_level,
2908 Index security_level,
2912 Relids incompatible_relids,
2920 foreach(
lc, clauses)
2931 incompatible_relids,
2986 Index security_level,
2990 Relids incompatible_relids,
2997 bool is_pushed_down;
3041 elog(
ERROR,
"failed to postpone qual containing lateral reference");
3049 elog(
ERROR,
"JOIN qualification cannot refer to other relations");
3103 root->hasPseudoConstantQuals =
true;
3161 is_pushed_down =
false;
3182 is_pushed_down =
true;
3214 incompatible_relids,
3392 foreach(
lc,
root->join_info_list)
3678 elog(
ERROR,
"cannot cope with variable-free clause");
3720 Index security_level,
3779 root->hasPseudoConstantQuals =
true;
3864 Index security_level)
3937 foreach(
lc,
root->join_info_list)
3975 for (rti = 1; rti <
root->simple_rel_array_size; rti++)
3985 foreach(
lc,
brel->joininfo)
4038 foreach(
lc,
root->fkey_list)
4051 if (
fkinfo->con_relid >=
root->simple_rel_array_size ||
4052 fkinfo->ref_relid >=
root->simple_rel_array_size)
4077 for (colno = 0; colno <
fkinfo->nkeys; colno++)
4134 if (clause->
opno ==
fkinfo->conpfeqop[colno])
4164 if (
fkinfo->rinfos[colno])
4165 fkinfo->nmatched_rcols++;
4211 opno = ((
OpExpr *) clause)->opno;
4248 opno = ((
OpExpr *) clause)->opno;
4291 if (lefttype != righttype)
bool enable_eager_aggregate
Bitmapset * bms_difference(const Bitmapset *a, const Bitmapset *b)
Bitmapset * bms_make_singleton(int x)
Bitmapset * bms_int_members(Bitmapset *a, const Bitmapset *b)
Bitmapset * bms_intersect(const Bitmapset *a, const Bitmapset *b)
bool bms_equal(const Bitmapset *a, const Bitmapset *b)
BMS_Comparison bms_subset_compare(const Bitmapset *a, const Bitmapset *b)
int bms_next_member(const Bitmapset *a, int prevbit)
Bitmapset * bms_del_members(Bitmapset *a, const Bitmapset *b)
Bitmapset * bms_del_member(Bitmapset *a, int x)
bool bms_is_subset(const Bitmapset *a, const Bitmapset *b)
bool bms_is_member(int x, const Bitmapset *a)
Bitmapset * bms_add_member(Bitmapset *a, int x)
Bitmapset * bms_add_members(Bitmapset *a, const Bitmapset *b)
Bitmapset * bms_union(const Bitmapset *a, const Bitmapset *b)
BMS_Membership bms_membership(const Bitmapset *a)
bool bms_overlap(const Bitmapset *a, const Bitmapset *b)
bool bms_get_singleton_member(const Bitmapset *a, int *member)
Bitmapset * bms_copy(const Bitmapset *a)
#define Assert(condition)
#define OidIsValid(objectId)
Var * find_forced_null_var(Node *node)
Node * eval_const_expressions(PlannerInfo *root, Node *node)
bool expr_is_nonnullable(PlannerInfo *root, Expr *expr, NotNullSource source)
Relids find_nonnullable_rels(Node *clause)
bool contain_volatile_functions(Node *clause)
int errcode(int sqlerrcode)
#define ereport(elevel,...)
EquivalenceClass * get_eclass_for_sort_expr(PlannerInfo *root, Expr *expr, List *opfamilies, Oid opcintype, Oid collation, Index sortref, Relids rel, bool create_it)
bool process_equivalence(PlannerInfo *root, RestrictInfo **p_restrictinfo, JoinDomain *jdomain)
EquivalenceClass * match_eclasses_to_foreign_key_col(PlannerInfo *root, ForeignKeyOptInfo *fkinfo, int colno)
#define palloc0_array(type, count)
#define palloc0_object(type)
Datum OidFunctionCall1Coll(Oid functionId, Oid collation, Datum arg1)
void expand_inherited_rtentry(PlannerInfo *root, RelOptInfo *rel, RangeTblEntry *rte, Index rti)
static void check_hashjoinable(RestrictInfo *restrictinfo)
static void create_grouping_expr_infos(PlannerInfo *root)
static void extract_lateral_references(PlannerInfo *root, RelOptInfo *brel, Index rtindex)
void rebuild_lateral_attr_needed(PlannerInfo *root)
static void check_mergejoinable(RestrictInfo *restrictinfo)
void distribute_restrictinfo_to_rels(PlannerInfo *root, RestrictInfo *restrictinfo)
static List * deconstruct_recurse(PlannerInfo *root, Node *jtnode, JoinDomain *parent_domain, JoinTreeItem *parent_jtitem, List **item_list)
static void compute_semijoin_info(PlannerInfo *root, SpecialJoinInfo *sjinfo, List *clause)
void match_foreign_keys_to_quals(PlannerInfo *root)
void find_lateral_references(PlannerInfo *root)
void remove_useless_groupby_columns(PlannerInfo *root)
static void add_base_clause_to_rel(PlannerInfo *root, Index relid, RestrictInfo *restrictinfo)
void add_base_rels_to_query(PlannerInfo *root, Node *jtnode)
void build_base_rel_tlists(PlannerInfo *root, List *final_tlist)
bool restriction_is_always_true(PlannerInfo *root, RestrictInfo *restrictinfo)
RestrictInfo * build_implied_join_equality(PlannerInfo *root, Oid opno, Oid collation, Expr *item1, Expr *item2, Relids qualscope, Index security_level)
static void deconstruct_distribute_oj_quals(PlannerInfo *root, List *jtitems, JoinTreeItem *jtitem)
static void distribute_quals_to_rels(PlannerInfo *root, List *clauses, JoinTreeItem *jtitem, SpecialJoinInfo *sjinfo, Index security_level, Relids qualscope, Relids ojscope, Relids outerjoin_nonnullable, Relids incompatible_relids, bool allow_equivalence, bool has_clone, bool is_clone, List **postponed_oj_qual_list)
static SpecialJoinInfo * make_outerjoininfo(PlannerInfo *root, Relids left_rels, Relids right_rels, Relids inner_join_rels, JoinType jointype, Index ojrelid, List *clause)
void add_vars_to_targetlist(PlannerInfo *root, List *vars, Relids where_needed)
bool restriction_is_always_false(PlannerInfo *root, RestrictInfo *restrictinfo)
static void distribute_qual_to_rels(PlannerInfo *root, Node *clause, JoinTreeItem *jtitem, SpecialJoinInfo *sjinfo, Index security_level, Relids qualscope, Relids ojscope, Relids outerjoin_nonnullable, Relids incompatible_relids, bool allow_equivalence, bool has_clone, bool is_clone, List **postponed_oj_qual_list)
List * deconstruct_jointree(PlannerInfo *root)
static bool check_redundant_nullability_qual(PlannerInfo *root, Node *clause)
void rebuild_joinclause_attr_needed(PlannerInfo *root)
void setup_eager_aggregation(PlannerInfo *root)
static EquivalenceClass * get_eclass_for_sortgroupclause(PlannerInfo *root, SortGroupClause *sgc, Expr *expr)
void add_other_rels_to_query(PlannerInfo *root)
static void mark_rels_nulled_by_join(PlannerInfo *root, Index ojrelid, Relids lower_rels)
RestrictInfo * process_implied_equality(PlannerInfo *root, Oid opno, Oid collation, Expr *item1, Expr *item2, Relids qualscope, Index security_level, bool both_const)
void create_lateral_join_info(PlannerInfo *root)
static void process_security_barrier_quals(PlannerInfo *root, int rti, JoinTreeItem *jtitem)
static bool is_partial_agg_memory_risky(PlannerInfo *root)
static void create_agg_clause_infos(PlannerInfo *root)
static void deconstruct_distribute(PlannerInfo *root, JoinTreeItem *jtitem)
void add_vars_to_attr_needed(PlannerInfo *root, List *vars, Relids where_needed)
static void check_memoizable(RestrictInfo *restrictinfo)
static Relids get_join_domain_min_rels(PlannerInfo *root, Relids domain_relids)
void add_join_clause_to_rels(PlannerInfo *root, RestrictInfo *restrictinfo, Relids join_relids)
List * lappend(List *list, void *datum)
List * list_append_unique(List *list, void *datum)
List * list_concat(List *list1, const List *list2)
List * lappend_int(List *list, int datum)
List * lappend_oid(List *list, Oid datum)
void list_free(List *list)
bool list_member_oid(const List *list, Oid datum)
void list_free_deep(List *list)
bool collations_agree_on_equality(Oid coll1, Oid coll2)
bool get_ordering_op_properties(Oid opno, Oid *opfamily, Oid *opcintype, CompareType *cmptype)
Oid get_opfamily_member_for_cmptype(Oid opfamily, Oid lefttype, Oid righttype, CompareType cmptype)
Oid get_opfamily_proc(Oid opfamily, Oid lefttype, Oid righttype, int16 procnum)
bool op_hashjoinable(Oid opno, Oid inputtype)
bool get_func_leakproof(Oid funcid)
bool op_mergejoinable(Oid opno, Oid inputtype)
List * get_mergejoin_opfamilies(Oid opno)
Oid get_commutator(Oid opno)
Node * makeBoolConst(bool value, bool isnull)
Expr * make_opclause(Oid opno, Oid opresulttype, bool opretset, Expr *leftop, Expr *rightop, Oid opcollid, Oid inputcollid)
#define BTEQUALIMAGE_PROC
Oid exprType(const Node *expr)
Oid exprCollation(const Node *expr)
static bool is_orclause(const void *clause)
static Node * get_rightop(const void *clause)
static bool is_opclause(const void *clause)
static Node * get_leftop(const void *clause)
#define IsA(nodeptr, _type_)
#define castNode(_type_, nodeptr)
#define PVC_RECURSE_AGGREGATES
#define PVC_RECURSE_PLACEHOLDERS
#define PVC_RECURSE_WINDOWFUNCS
#define PVC_INCLUDE_PLACEHOLDERS
#define PVC_INCLUDE_AGGREGATES
const char * LCS_asString(LockClauseStrength strength)
void initialize_mergeclause_eclasses(PlannerInfo *root, RestrictInfo *restrictinfo)
#define lfirst_node(type, lc)
static int list_length(const List *l)
#define linitial_node(type, l)
#define forthree(cell1, list1, cell2, list2, cell3, list3)
#define foreach_node(type, var, lst)
#define list_make2(x1, x2)
bool contain_placeholder_references_to(PlannerInfo *root, Node *clause, int relid)
PlaceHolderInfo * find_placeholder_info(PlannerInfo *root, PlaceHolderVar *phv)
Expr * preprocess_phv_expression(PlannerInfo *root, Expr *expr)
static bool DatumGetBool(Datum X)
static Datum ObjectIdGetDatum(Oid X)
RelOptInfo * find_base_rel(PlannerInfo *root, int relid)
RelOptInfo * build_simple_rel(PlannerInfo *root, int relid, RelOptInfo *parent)
RelOptInfo * find_base_rel_ignore_join(PlannerInfo *root, int relid)
bool restriction_is_or_clause(RestrictInfo *restrictinfo)
RestrictInfo * make_restrictinfo(PlannerInfo *root, Expr *clause, bool is_pushed_down, bool has_clone, bool is_clone, bool pseudoconstant, Index security_level, Relids required_relids, Relids incompatible_relids, Relids outer_relids)
Node * add_nulling_relids(Node *node, const Bitmapset *target_relids, const Bitmapset *added_relids)
Node * remove_nulling_relids(Node *node, const Bitmapset *removable_relids, const Bitmapset *except_relids)
void IncrementVarSublevelsUp(Node *node, int delta_sublevels_up, int min_sublevels_up)
struct JoinTreeItem * jti_parent
Bitmapset * notnullattnums
struct PathTarget * reltarget
Index baserestrict_min_security
LockClauseStrength strength
#define FirstLowInvalidHeapAttributeNumber
TargetEntry * get_sortgroupclause_tle(SortGroupClause *sgClause, List *targetList)
TypeCacheEntry * lookup_type_cache(Oid type_id, int flags)
#define TYPECACHE_BTREE_OPFAMILY
#define TYPECACHE_HASH_PROC
Relids pull_varnos(PlannerInfo *root, Node *node)
List * pull_vars_of_level(Node *node, int levelsup)
List * pull_var_clause(Node *node, int flags)