]> granicus.if.org Git - postgresql/blob - src/include/optimizer/planmain.h
Implement feature of new FE/BE protocol whereby RowDescription identifies
[postgresql] / src / include / optimizer / planmain.h
1 /*-------------------------------------------------------------------------
2  *
3  * planmain.h
4  *        prototypes for various files in optimizer/plan
5  *
6  *
7  * Portions Copyright (c) 1996-2002, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * $Id: planmain.h,v 1.70 2003/05/06 00:20:33 tgl Exp $
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef PLANMAIN_H
15 #define PLANMAIN_H
16
17 #include "nodes/plannodes.h"
18 #include "nodes/relation.h"
19
20 /*
21  * prototypes for plan/planmain.c
22  */
23 extern void query_planner(Query *root, List *tlist, double tuple_fraction,
24                                                   Path **cheapest_path, Path **sorted_path);
25
26 /*
27  * prototypes for plan/createplan.c
28  */
29 extern Plan *create_plan(Query *root, Path *best_path);
30 extern SubqueryScan *make_subqueryscan(List *qptlist, List *qpqual,
31                                   Index scanrelid, Plan *subplan);
32 extern Append *make_append(List *appendplans, bool isTarget, List *tlist);
33 extern Sort *make_sort_from_sortclauses(Query *root, List *tlist,
34                                                                                 Plan *lefttree, List *sortcls);
35 extern Sort *make_sort_from_groupcols(Query *root, List *groupcls,
36                                                                           AttrNumber *grpColIdx, Plan *lefttree);
37 extern Agg *make_agg(Query *root, List *tlist, List *qual,
38                                          AggStrategy aggstrategy,
39                                          int numGroupCols, AttrNumber *grpColIdx,
40                                          long numGroups, int numAggs,
41                                          Plan *lefttree);
42 extern Group *make_group(Query *root, List *tlist,
43                                                  int numGroupCols, AttrNumber *grpColIdx,
44                                                  double numGroups,
45                                                  Plan *lefttree);
46 extern Material *make_material(List *tlist, Plan *lefttree);
47 extern Plan *materialize_finished_plan(Plan *subplan);
48 extern Unique *make_unique(List *tlist, Plan *lefttree, List *distinctList);
49 extern Limit *make_limit(List *tlist, Plan *lefttree,
50                    Node *limitOffset, Node *limitCount);
51 extern SetOp *make_setop(SetOpCmd cmd, List *tlist, Plan *lefttree,
52                    List *distinctList, AttrNumber flagColIdx);
53 extern Result *make_result(List *tlist, Node *resconstantqual, Plan *subplan);
54
55 /*
56  * prototypes for plan/initsplan.c
57  */
58 extern void add_base_rels_to_query(Query *root, Node *jtnode);
59 extern void build_base_rel_tlists(Query *root, List *tlist);
60 extern Relids distribute_quals_to_rels(Query *root, Node *jtnode);
61 extern void process_implied_equality(Query *root,
62                                                                          Node *item1, Node *item2,
63                                                                          Oid sortop1, Oid sortop2,
64                                                                          Relids item1_relids, Relids item2_relids,
65                                                                          bool delete_it);
66
67 /*
68  * prototypes for plan/setrefs.c
69  */
70 extern void set_plan_references(Plan *plan, List *rtable);
71 extern void fix_opfuncids(Node *node);
72
73 #endif   /* PLANMAIN_H */