1 /*-------------------------------------------------------------------------
4 * prototypes for various files in optimizer/path (were separate
8 * Portions Copyright (c) 1996-2000, PostgreSQL, Inc
9 * Portions Copyright (c) 1994, Regents of the University of California
11 * $Id: paths.h,v 1.47 2000/09/12 21:07:11 tgl Exp $
13 *-------------------------------------------------------------------------
18 #include "nodes/relation.h"
20 /* default GEQO threshold (default value for geqo_rels) */
21 #define DEFAULT_GEQO_RELS 11
27 extern bool enable_geqo;
30 extern RelOptInfo *make_one_rel(Query *root);
34 * routines to generate index paths
36 extern void create_index_paths(Query *root, RelOptInfo *rel, List *indices,
37 List *restrictinfo_list,
39 extern Oid indexable_operator(Expr *clause, Oid opclass, Oid relam,
40 bool indexkey_on_left);
41 extern List *extract_or_indexqual_conditions(RelOptInfo *rel,
44 extern List *expand_indexqual_conditions(List *indexquals);
48 * additional routines for indexable OR clauses
50 extern void create_or_index_paths(Query *root, RelOptInfo *rel,
55 * routines to generate tid paths
57 extern void create_tidscan_paths(Query *root, RelOptInfo *rel);
61 * routines to create join paths
63 extern void add_paths_to_joinrel(Query *root, RelOptInfo *joinrel,
71 * routines to determine which relations to join
73 extern List *make_rels_by_joins(Query *root, int level, List **joinrels);
74 extern List *make_rels_by_clause_joins(Query *root,
77 extern List *make_rels_by_clauseless_joins(Query *root,
80 extern RelOptInfo *make_rel_from_jointree(Query *root, Node *jtnode);
84 * utilities for matching and building path keys
88 PATHKEYS_EQUAL, /* pathkeys are identical */
89 PATHKEYS_BETTER1, /* pathkey 1 is a superset of pathkey 2 */
90 PATHKEYS_BETTER2, /* vice versa */
91 PATHKEYS_DIFFERENT /* neither pathkey includes the other */
94 extern void add_equijoined_keys(Query *root, RestrictInfo *restrictinfo);
95 extern void generate_implied_equalities(Query *root);
96 extern List *canonicalize_pathkeys(Query *root, List *pathkeys);
97 extern PathKeysComparison compare_pathkeys(List *keys1, List *keys2);
98 extern bool pathkeys_contained_in(List *keys1, List *keys2);
99 extern Path *get_cheapest_path_for_pathkeys(List *paths, List *pathkeys,
100 CostSelector cost_criterion);
101 extern Path *get_cheapest_fractional_path_for_pathkeys(List *paths,
104 extern List *build_index_pathkeys(Query *root, RelOptInfo *rel,
106 ScanDirection scandir);
107 extern List *build_join_pathkeys(List *outer_pathkeys,
108 List *join_rel_tlist,
109 List *equi_key_list);
110 extern List *make_pathkeys_for_sortclauses(List *sortclauses,
112 extern List *find_mergeclauses_for_pathkeys(List *pathkeys,
113 List *restrictinfos);
114 extern List *make_pathkeys_for_mergeclauses(Query *root,