97 #define NUM_EXEC_TLIST(parentplan) ((parentplan)->plan_rows)
98 #define NUM_EXEC_QUAL(parentplan) ((parentplan)->plan_rows * 2.0)
107 #define ISREGCLASSCONST(con) \
108 (((con)->consttype == REGCLASSOID || (con)->consttype == OIDOID) && \
111 #define fix_scan_list(root, lst, rtoffset, num_exec) \
112 ((List *) fix_scan_expr(root, (Node *) (lst), rtoffset, num_exec))
141 int rtoffset,
double num_exec);
165 Index acceptable_rel,
166 int rtoffset,
double num_exec);
173 int rtoffset,
double num_exec);
179 Index resultRelation,
286 newrc->
rti += rtoffset;
287 newrc->
prti += rtoffset;
403 rti < root->simple_rel_array_size)
432 else if (recursing ||
555 splan->scan.scanrelid += rtoffset;
556 splan->scan.plan.targetlist =
559 splan->scan.plan.qual =
568 splan->scan.scanrelid += rtoffset;
569 splan->scan.plan.targetlist =
572 splan->scan.plan.qual =
584 splan->scan.scanrelid += rtoffset;
585 splan->scan.plan.targetlist =
588 splan->scan.plan.qual =
594 splan->indexqualorig =
597 splan->indexorderby =
600 splan->indexorderbyorig =
616 splan->scan.scanrelid += rtoffset;
622 splan->indexqualorig =
631 splan->scan.scanrelid += rtoffset;
632 splan->scan.plan.targetlist =
635 splan->scan.plan.qual =
638 splan->bitmapqualorig =
647 splan->scan.scanrelid += rtoffset;
648 splan->scan.plan.targetlist =
651 splan->scan.plan.qual =
663 splan->scan.scanrelid += rtoffset;
664 splan->scan.plan.targetlist =
667 splan->scan.plan.qual =
670 splan->tidrangequals =
684 splan->scan.scanrelid += rtoffset;
685 splan->scan.plan.targetlist =
688 splan->scan.plan.qual =
699 splan->scan.scanrelid += rtoffset;
700 splan->scan.plan.targetlist =
703 splan->scan.plan.qual =
715 splan->scan.scanrelid += rtoffset;
716 splan->scan.plan.targetlist =
719 splan->scan.plan.qual =
722 splan->values_lists =
731 splan->scan.scanrelid += rtoffset;
732 splan->scan.plan.targetlist =
735 splan->scan.plan.qual =
744 splan->scan.scanrelid += rtoffset;
745 splan->scan.plan.targetlist =
748 splan->scan.plan.qual =
757 splan->scan.scanrelid += rtoffset;
758 splan->scan.plan.targetlist =
761 splan->scan.plan.qual =
840 foreach(l,
splan->rowMarks)
845 rc->
prti += rtoffset;
880 plan->targetlist = (
List *)
883 plan->qual = (
List *)
939 if (
splan->plan.lefttree != NULL)
955 foreach(l,
splan->plan.targetlist)
966 splan->plan.targetlist =
974 splan->resconstantqual =
989 splan->withCheckOptionLists =
993 if (
splan->returningLists)
1005 lcrr,
splan->resultRelations)
1015 newRL =
lappend(newRL, rlist);
1017 splan->returningLists = newRL;
1038 if (
splan->onConflictSet)
1044 splan->onConflictSet =
1058 splan->exclRelTlist =
1072 if (
splan->mergeActionLists !=
NIL)
1096 lcr,
splan->resultRelations)
1101 foreach(l, mergeActionList)
1124 splan->nominalRelation += rtoffset;
1125 if (
splan->rootRelation)
1126 splan->rootRelation += rtoffset;
1127 splan->exclRelRTI += rtoffset;
1129 foreach(l,
splan->resultRelations)
1133 foreach(l,
splan->rowMarks)
1137 rc->
rti += rtoffset;
1138 rc->
prti += rtoffset;
1147 splan->resultRelations);
1148 if (
splan->rootRelation)
1152 splan->rootRelation);
1178 foreach(l,
splan->bitmapplans)
1193 foreach(l,
splan->bitmapplans)
1202 elog(
ERROR,
"unrecognized node type: %d",
1236 List *stripped_indextlist;
1246 stripped_indextlist =
NIL;
1252 stripped_indextlist =
lappend(stripped_indextlist, indextle);
1289 pfree(index_itlist);
1291 return (
Plan *) plan;
1335 plan->scan.plan.
qual =
1339 result = (
Plan *) plan;
1477 fscan->fdw_exprs = (
List *)
1479 (
Node *) fscan->fdw_exprs,
1484 fscan->fdw_recheck_quals = (
List *)
1486 (
Node *) fscan->fdw_recheck_quals,
1493 fscan->fdw_scan_tlist =
1506 fscan->scan.plan.
qual =
1512 fscan->fdw_recheck_quals =
1558 cscan->custom_exprs = (
List *)
1560 (
Node *) cscan->custom_exprs,
1567 cscan->custom_scan_tlist =
1577 cscan->scan.plan.
qual =
1580 cscan->custom_exprs =
1650 foreach(l2, prune_infos)
1663 return (
Plan *) aplan;
1722 foreach(l2, prune_infos)
1735 return (
Plan *) mplan;
1825 ((
Aggref *) node)->aggfnoid);
1841 ((
OpExpr *) node)->opfuncid);
1892 foreach(lc, g->
refs)
1918 int subqueryid = p->
paramid >> 16;
1919 int colno = p->
paramid & 0xFFFF;
1922 if (subqueryid <= 0 ||
1966 if (bestplan == NULL || curcost <= bestcost)
1979 return (
Node *) bestplan;
2005 context.
root = root;
2009 if (rtoffset != 0 ||
2057 return (
Node *) var;
2089 return (
Node *) cexpr;
2174 elog(
ERROR,
"NestLoopParam was not reduced to a simple Var");
2258 pfree(outer_itlist);
2259 pfree(inner_itlist);
2285 List *output_targetlist;
2290 output_targetlist =
NIL;
2321 output_targetlist =
lappend(output_targetlist, tle);
2333 pfree(subplan_itlist);
2354 for (proot = root; proot != NULL; proot = proot->
parent_root)
2373 ((
Gather *) plan)->initParam =
2419 memcpy(child_agg, orig_agg,
sizeof(
Aggref));
2448 return (
Node *) parent_agg;
2470 List *output_targetlist;
2473 output_targetlist =
NIL;
2489 output_targetlist =
lappend(output_targetlist, tle);
2502 newvar->varnosyn = oldvar->
varnosyn + rtoffset;
2507 newvar->varnosyn = 0;
2508 newvar->varattnosyn = 0;
2513 output_targetlist =
lappend(output_targetlist, tle);
2546 itlist->
tlist = tlist;
2551 vinfo = itlist->
vars;
2596 itlist->
tlist = tlist;
2601 vinfo = itlist->
vars;
2637 int newvarno,
int rtoffset)
2639 int varno = var->
varno;
2644 vinfo = itlist->
vars;
2653 newvar->
varno = newvarno;
2723 foreach(lc, itlist->
tlist)
2790 Index acceptable_rel,
2796 context.
root = root;
2824 return (
Node *) newvar;
2835 return (
Node *) newvar;
2845 return (
Node *) var;
2849 elog(
ERROR,
"variable not found in subplan target lists");
2862 return (
Node *) newvar;
2870 return (
Node *) newvar;
2883 return (
Node *) newvar;
2891 return (
Node *) newvar;
2948 context.
root = root;
2972 elog(
ERROR,
"variable not found in subplan target list");
2973 return (
Node *) newvar;
2986 return (
Node *) newvar;
2998 return (
Node *) newvar;
3068 Index resultRelation,
3122 return (
Node *) newvar;
3123 elog(
ERROR,
"WindowFunc not found in subplan target lists");
3144 context.
root = root;
3269 List **relationOids,
3271 bool *hasRowSecurity)
3277 MemSet(&glob, 0,
sizeof(glob));
3284 MemSet(&root, 0,
sizeof(root));
3330 foreach(lc, query->
rtable)
3346 (
void *) context, 0);
int bms_next_member(const Bitmapset *a, int prevbit)
Bitmapset * bms_add_member(Bitmapset *a, int x)
Bitmapset * bms_intersect(const Bitmapset *a, const Bitmapset *b)
#define offsetof(type, field)
#define FLEXIBLE_ARRAY_MEMBER
#define MemSet(start, val, len)
#define OidIsValid(objectId)
bool equal(const void *a, const void *b)
Assert(fmt[strlen(fmt) - 1] !='\n')
List * lappend(List *list, void *datum)
List * lappend_int(List *list, int datum)
List * lappend_oid(List *list, Oid datum)
List * list_concat(List *list1, const List *list2)
Datum lca(PG_FUNCTION_ARGS)
Var * makeVarFromTargetEntry(int varno, TargetEntry *tle)
TargetEntry * makeTargetEntry(Expr *expr, AttrNumber resno, char *resname, bool resjunk)
Const * makeNullConst(Oid consttype, int32 consttypmod, Oid constcollid)
Var * makeVar(int varno, AttrNumber varattno, Oid vartype, int32 vartypmod, Oid varcollid, Index varlevelsup)
TargetEntry * flatCopyTargetEntry(TargetEntry *src_tle)
void pfree(void *pointer)
void * palloc0(Size size)
bool query_tree_walker(Query *query, bool(*walker)(), void *context, int flags)
Oid exprType(const Node *expr)
int32 exprTypmod(const Node *expr)
Oid exprCollation(const Node *expr)
bool expression_tree_walker(Node *node, bool(*walker)(), void *context)
Node * expression_tree_mutator(Node *node, Node *(*mutator)(), void *context)
void set_sa_opfuncid(ScalarArrayOpExpr *opexpr)
void set_opfuncid(OpExpr *opexpr)
#define QTW_EXAMINE_RTES_BEFORE
#define IsA(nodeptr, _type_)
#define DO_AGGSPLIT_COMBINE(as)
@ AGGSPLIT_FINAL_DESERIAL
@ AGGSPLIT_INITIAL_SERIAL
#define lfirst_node(type, lc)
static int list_length(const List *l)
#define forboth(cell1, list1, cell2, list2)
static void * list_nth(const List *list, int n)
#define foreach_current_index(cell)
void mark_partial_aggref(Aggref *agg, AggSplit aggsplit)
@ SUBQUERY_SCAN_NONTRIVIAL
#define DatumGetObjectId(X)
#define ObjectIdGetDatum(X)
#define IS_SPECIAL_VARNO(varno)
RelOptInfo * find_base_rel(PlannerInfo *root, int relid)
RelOptInfo * fetch_upper_rel(PlannerInfo *root, UpperRelationKind kind, Relids relids)
void record_plan_type_dependency(PlannerInfo *root, Oid typid)
#define NUM_EXEC_QUAL(parentplan)
static void set_hash_references(PlannerInfo *root, Plan *plan, int rtoffset)
static void fix_expr_common(PlannerInfo *root, Node *node)
static void add_rtes_to_flat_rtable(PlannerInfo *root, bool recursing)
static Node * fix_join_expr_mutator(Node *node, fix_join_expr_context *context)
static Plan * set_append_references(PlannerInfo *root, Append *aplan, int rtoffset)
static Node * fix_param_node(PlannerInfo *root, Param *p)
static Plan * set_mergeappend_references(PlannerInfo *root, MergeAppend *mplan, int rtoffset)
static indexed_tlist * build_tlist_index_other_vars(List *tlist, int ignore_rel)
static List * set_returning_clause_references(PlannerInfo *root, List *rlist, Plan *topplan, Index resultRelation, int rtoffset)
void record_plan_function_dependency(PlannerInfo *root, Oid funcid)
static void add_rte_to_flat_rtable(PlannerGlobal *glob, RangeTblEntry *rte)
static Relids offset_relid_set(Relids relids, int rtoffset)
static indexed_tlist * build_tlist_index(List *tlist)
static List * set_windowagg_runcondition_references(PlannerInfo *root, List *runcondition, Plan *plan)
bool trivial_subqueryscan(SubqueryScan *plan)
static Var * search_indexed_tlist_for_var(Var *var, indexed_tlist *itlist, int newvarno, int rtoffset)
static void set_upper_references(PlannerInfo *root, Plan *plan, int rtoffset)
static Node * fix_alternative_subplan(PlannerInfo *root, AlternativeSubPlan *asplan, double num_exec)
static Node * fix_upper_expr(PlannerInfo *root, Node *node, indexed_tlist *subplan_itlist, int newvarno, int rtoffset, double num_exec)
static Var * search_indexed_tlist_for_sortgroupref(Expr *node, Index sortgroupref, indexed_tlist *itlist, int newvarno)
static void flatten_unplanned_rtes(PlannerGlobal *glob, RangeTblEntry *rte)
static void set_param_references(PlannerInfo *root, Plan *plan)
static Var * search_indexed_tlist_for_non_var(Expr *node, indexed_tlist *itlist, int newvarno)
static Node * fix_upper_expr_mutator(Node *node, fix_upper_expr_context *context)
static Node * fix_scan_expr_mutator(Node *node, fix_scan_expr_context *context)
static void set_foreignscan_references(PlannerInfo *root, ForeignScan *fscan, int rtoffset)
static Plan * set_subqueryscan_references(PlannerInfo *root, SubqueryScan *plan, int rtoffset)
static bool flatten_rtes_walker(Node *node, PlannerGlobal *glob)
static Plan * set_indexonlyscan_references(PlannerInfo *root, IndexOnlyScan *plan, int rtoffset)
static Node * convert_combining_aggrefs(Node *node, void *context)
static void set_dummy_tlist_references(Plan *plan, int rtoffset)
static void set_customscan_references(PlannerInfo *root, CustomScan *cscan, int rtoffset)
static Node * fix_windowagg_condition_expr_mutator(Node *node, fix_windowagg_cond_context *context)
#define ISREGCLASSCONST(con)
Plan * set_plan_references(PlannerInfo *root, Plan *plan)
void extract_query_dependencies(Node *query, List **relationOids, List **invalItems, bool *hasRowSecurity)
bool extract_query_dependencies_walker(Node *node, PlannerInfo *context)
static Var * copyVar(Var *var)
#define NUM_EXEC_TLIST(parentplan)
static List * fix_join_expr(PlannerInfo *root, List *clauses, indexed_tlist *outer_itlist, indexed_tlist *inner_itlist, Index acceptable_rel, int rtoffset, double num_exec)
static void set_join_references(PlannerInfo *root, Join *join, int rtoffset)
static List * fix_windowagg_condition_expr(PlannerInfo *root, List *runcondition, indexed_tlist *subplan_itlist)
static Plan * clean_up_removed_plan_level(Plan *parent, Plan *child)
static Node * fix_scan_expr(PlannerInfo *root, Node *node, int rtoffset, double num_exec)
static Plan * set_plan_refs(PlannerInfo *root, Plan *plan, int rtoffset)
static bool fix_scan_expr_walker(Node *node, fix_scan_expr_context *context)
#define fix_scan_list(root, lst, rtoffset, num_exec)
struct PartitionPruneInfo * part_prune_info
Bitmapset * custom_relids
struct PartitionPruneInfo * part_prune_info
AttrNumber * grouping_map
struct RelOptInfo ** simple_rel_array
bool hasAlternativeSubPlans
PlannerInfo * parent_root
struct TableSampleClause * tablesample
SubqueryScanStatus scanstatus
indexed_tlist * outer_itlist
indexed_tlist * inner_itlist
indexed_tlist * subplan_itlist
indexed_tlist * subplan_itlist
tlist_vinfo vars[FLEXIBLE_ARRAY_MEMBER]
#define GetSysCacheHashValue1(cacheId, key1)
void apply_tlist_labeling(List *dest_tlist, List *src_tlist)
TargetEntry * tlist_member(Expr *node, List *targetlist)
#define FirstUnpinnedObjectId
Query * UtilityContainsQuery(Node *parsetree)