OSDN Git Service

Pgindent run for 8.0.
[pg-rex/syncrep.git] / src / include / optimizer / paths.h
1 /*-------------------------------------------------------------------------
2  *
3  * paths.h
4  *        prototypes for various files in optimizer/path (were separate
5  *        header files)
6  *
7  *
8  * Portions Copyright (c) 1996-2004, PostgreSQL Global Development Group
9  * Portions Copyright (c) 1994, Regents of the University of California
10  *
11  * $PostgreSQL: pgsql/src/include/optimizer/paths.h,v 1.75 2004/08/29 05:06:57 momjian Exp $
12  *
13  *-------------------------------------------------------------------------
14  */
15 #ifndef PATHS_H
16 #define PATHS_H
17
18 #include "nodes/relation.h"
19
20
21 /*
22  * allpaths.c
23  */
24 extern bool enable_geqo;
25 extern int      geqo_threshold;
26
27 extern RelOptInfo *make_one_rel(Query *root);
28 extern RelOptInfo *make_fromexpr_rel(Query *root, FromExpr *from);
29
30 #ifdef OPTIMIZER_DEBUG
31 extern void debug_print_rel(Query *root, RelOptInfo *rel);
32 #endif
33
34 /*
35  * indxpath.c
36  *        routines to generate index paths
37  */
38 extern void create_index_paths(Query *root, RelOptInfo *rel);
39 extern Path *best_inner_indexscan(Query *root, RelOptInfo *rel,
40                                          Relids outer_relids, JoinType jointype);
41 extern List *group_clauses_by_indexkey_for_or(RelOptInfo *rel,
42                                                                  IndexOptInfo *index,
43                                                                  Expr *orsubclause);
44 extern List *expand_indexqual_conditions(IndexOptInfo *index,
45                                                         List *clausegroups);
46 extern void check_partial_indexes(Query *root, RelOptInfo *rel);
47 extern List *flatten_clausegroups_list(List *clausegroups);
48 extern Expr *make_expr_from_indexclauses(List *indexclauses);
49
50 /*
51  * orindxpath.c
52  *        additional routines for indexable OR clauses
53  */
54 extern bool create_or_index_quals(Query *root, RelOptInfo *rel);
55 extern void create_or_index_paths(Query *root, RelOptInfo *rel);
56
57 /*
58  * tidpath.h
59  *        routines to generate tid paths
60  */
61 extern void create_tidscan_paths(Query *root, RelOptInfo *rel);
62
63 /*
64  * joinpath.c
65  *         routines to create join paths
66  */
67 extern void add_paths_to_joinrel(Query *root, RelOptInfo *joinrel,
68                                          RelOptInfo *outerrel,
69                                          RelOptInfo *innerrel,
70                                          JoinType jointype,
71                                          List *restrictlist);
72
73 /*
74  * joinrels.c
75  *        routines to determine which relations to join
76  */
77 extern List *make_rels_by_joins(Query *root, int level, List **joinrels);
78 extern RelOptInfo *make_jointree_rel(Query *root, Node *jtnode);
79 extern RelOptInfo *make_join_rel(Query *root,
80                           RelOptInfo *rel1, RelOptInfo *rel2,
81                           JoinType jointype);
82
83 /*
84  * pathkeys.c
85  *        utilities for matching and building path keys
86  */
87 typedef enum
88 {
89         PATHKEYS_EQUAL,                         /* pathkeys are identical */
90         PATHKEYS_BETTER1,                       /* pathkey 1 is a superset of pathkey 2 */
91         PATHKEYS_BETTER2,                       /* vice versa */
92         PATHKEYS_DIFFERENT                      /* neither pathkey includes the other */
93 } PathKeysComparison;
94
95 extern void add_equijoined_keys(Query *root, RestrictInfo *restrictinfo);
96 extern bool exprs_known_equal(Query *root, Node *item1, Node *item2);
97 extern void generate_implied_equalities(Query *root);
98 extern List *canonicalize_pathkeys(Query *root, List *pathkeys);
99 extern PathKeysComparison compare_pathkeys(List *keys1, List *keys2);
100 extern bool pathkeys_contained_in(List *keys1, List *keys2);
101 extern PathKeysComparison compare_noncanonical_pathkeys(List *keys1,
102                                                           List *keys2);
103 extern bool noncanonical_pathkeys_contained_in(List *keys1, List *keys2);
104 extern Path *get_cheapest_path_for_pathkeys(List *paths, List *pathkeys,
105                                                            CostSelector cost_criterion);
106 extern Path *get_cheapest_fractional_path_for_pathkeys(List *paths,
107                                                                                   List *pathkeys,
108                                                                                   double fraction);
109 extern List *build_index_pathkeys(Query *root, RelOptInfo *rel,
110                                          IndexOptInfo *index,
111                                          ScanDirection scandir);
112 extern List *build_subquery_pathkeys(Query *root, RelOptInfo *rel,
113                                                 Query *subquery);
114 extern List *build_join_pathkeys(Query *root,
115                                         RelOptInfo *joinrel,
116                                         List *outer_pathkeys);
117 extern List *make_pathkeys_for_sortclauses(List *sortclauses,
118                                                           List *tlist);
119 extern void cache_mergeclause_pathkeys(Query *root,
120                                                    RestrictInfo *restrictinfo);
121 extern List *find_mergeclauses_for_pathkeys(Query *root,
122                                                            List *pathkeys,
123                                                            List *restrictinfos);
124 extern List *make_pathkeys_for_mergeclauses(Query *root,
125                                                            List *mergeclauses,
126                                                            RelOptInfo *rel);
127 extern int pathkeys_useful_for_merging(Query *root,
128                                                         RelOptInfo *rel,
129                                                         List *pathkeys);
130 extern int      pathkeys_useful_for_ordering(Query *root, List *pathkeys);
131 extern List *truncate_useless_pathkeys(Query *root,
132                                                   RelOptInfo *rel,
133                                                   List *pathkeys);
134
135 #endif   /* PATHS_H */