-extern Plan *create_plan(Path *best_path);
-extern SeqScan *
-make_seqscan(List *qptlist, List *qpqual, Index scanrelid,
- Plan *lefttree);
-extern Sort *
-make_sort(List *tlist, Oid tempid, Plan *lefttree,
- int keycount);
-extern Agg *make_agg(List *tlist, int nagg, Aggreg **aggs);
-extern Group *
-make_group(List *tlist, bool tuplePerGroup, int ngrp,
- AttrNumber *grpColIdx, Sort *lefttree);
-extern Unique *make_unique(List *tlist, Plan *lefttree, char *uniqueAttr);
-extern List *generate_fjoin(List *tlist);
-
+extern Plan *create_plan(Query *root, Path *best_path);
+extern SubqueryScan *make_subqueryscan(List *qptlist, List *qpqual,
+ Index scanrelid, Plan *subplan);
+extern Append *make_append(List *appendplans, bool isTarget, List *tlist);
+extern Sort *make_sort_from_sortclauses(Query *root, List *sortcls,
+ Plan *lefttree);
+extern Sort *make_sort_from_groupcols(Query *root, List *groupcls,
+ AttrNumber *grpColIdx, Plan *lefttree);
+extern Agg *make_agg(Query *root, List *tlist, List *qual,
+ AggStrategy aggstrategy,
+ int numGroupCols, AttrNumber *grpColIdx,
+ long numGroups, int numAggs,
+ Plan *lefttree);
+extern Group *make_group(Query *root, List *tlist, List *qual,
+ int numGroupCols, AttrNumber *grpColIdx,
+ double numGroups,
+ Plan *lefttree);
+extern Material *make_material(Plan *lefttree);
+extern Plan *materialize_finished_plan(Plan *subplan);
+extern Unique *make_unique(Plan *lefttree, List *distinctList);
+extern Limit *make_limit(Plan *lefttree, Node *limitOffset, Node *limitCount);
+extern SetOp *make_setop(SetOpCmd cmd, Plan *lefttree,
+ List *distinctList, AttrNumber flagColIdx);
+extern Result *make_result(List *tlist, Node *resconstantqual, Plan *subplan);
+extern bool is_projection_capable_plan(Plan *plan);