1996-07-09 08:22:35 +02:00
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
*
|
1999-02-14 00:22:53 +01:00
|
|
|
* paths.h
|
1999-07-27 08:23:12 +02:00
|
|
|
* prototypes for various files in optimizer/path (were separate
|
|
|
|
* header files)
|
1996-07-09 08:22:35 +02:00
|
|
|
*
|
|
|
|
*
|
2000-01-26 06:58:53 +01:00
|
|
|
* Portions Copyright (c) 1996-2000, PostgreSQL, Inc
|
|
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
1996-07-09 08:22:35 +02:00
|
|
|
*
|
2000-12-14 23:30:45 +01:00
|
|
|
* $Id: paths.h,v 1.49 2000/12/14 22:30:45 tgl Exp $
|
1996-07-09 08:22:35 +02:00
|
|
|
*
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
*/
|
1997-09-07 07:04:48 +02:00
|
|
|
#ifndef PATHS_H
|
|
|
|
#define PATHS_H
|
1996-07-09 08:22:35 +02:00
|
|
|
|
1997-11-26 02:14:33 +01:00
|
|
|
#include "nodes/relation.h"
|
|
|
|
|
2000-01-23 00:50:30 +01:00
|
|
|
/* default GEQO threshold (default value for geqo_rels) */
|
2000-05-31 02:28:42 +02:00
|
|
|
#define DEFAULT_GEQO_RELS 11
|
2000-01-23 00:50:30 +01:00
|
|
|
|
|
|
|
|
1996-07-09 08:22:35 +02:00
|
|
|
/*
|
1999-07-27 08:23:12 +02:00
|
|
|
* allpaths.c
|
1996-07-09 08:22:35 +02:00
|
|
|
*/
|
2000-01-23 00:50:30 +01:00
|
|
|
extern bool enable_geqo;
|
|
|
|
extern int geqo_rels;
|
|
|
|
|
2000-02-07 05:41:04 +01:00
|
|
|
extern RelOptInfo *make_one_rel(Query *root);
|
2000-09-29 20:21:41 +02:00
|
|
|
extern RelOptInfo *make_fromexpr_rel(Query *root, FromExpr *from);
|
1996-07-09 08:22:35 +02:00
|
|
|
|
|
|
|
/*
|
1999-07-27 08:23:12 +02:00
|
|
|
* indxpath.c
|
1997-09-07 07:04:48 +02:00
|
|
|
* routines to generate index paths
|
1996-07-09 08:22:35 +02:00
|
|
|
*/
|
2000-12-14 23:30:45 +01:00
|
|
|
extern void create_index_paths(Query *root, RelOptInfo *rel, List *indices);
|
2000-01-09 01:26:47 +01:00
|
|
|
extern Oid indexable_operator(Expr *clause, Oid opclass, Oid relam,
|
2000-04-12 19:17:23 +02:00
|
|
|
bool indexkey_on_left);
|
2000-02-05 19:26:09 +01:00
|
|
|
extern List *extract_or_indexqual_conditions(RelOptInfo *rel,
|
2000-04-12 19:17:23 +02:00
|
|
|
IndexOptInfo *index,
|
|
|
|
Expr *orsubclause);
|
1999-07-27 05:51:11 +02:00
|
|
|
extern List *expand_indexqual_conditions(List *indexquals);
|
1996-07-09 08:22:35 +02:00
|
|
|
|
2000-02-05 19:26:09 +01:00
|
|
|
/*
|
|
|
|
* orindxpath.c
|
|
|
|
* additional routines for indexable OR clauses
|
|
|
|
*/
|
2000-02-15 21:49:31 +01:00
|
|
|
extern void create_or_index_paths(Query *root, RelOptInfo *rel,
|
2000-04-12 19:17:23 +02:00
|
|
|
List *clauses);
|
2000-02-05 19:26:09 +01:00
|
|
|
|
1999-11-23 21:07:06 +01:00
|
|
|
/*
|
|
|
|
* tidpath.h
|
|
|
|
* routines to generate tid paths
|
|
|
|
*/
|
2000-02-15 21:49:31 +01:00
|
|
|
extern void create_tidscan_paths(Query *root, RelOptInfo *rel);
|
1999-11-23 21:07:06 +01:00
|
|
|
|
1996-07-09 08:22:35 +02:00
|
|
|
/*
|
1999-07-27 08:23:12 +02:00
|
|
|
* joinpath.c
|
1997-09-07 07:04:48 +02:00
|
|
|
* routines to create join paths
|
1996-07-09 08:22:35 +02:00
|
|
|
*/
|
2000-02-07 05:41:04 +01:00
|
|
|
extern void add_paths_to_joinrel(Query *root, RelOptInfo *joinrel,
|
2000-09-12 23:07:18 +02:00
|
|
|
RelOptInfo *outerrel,
|
|
|
|
RelOptInfo *innerrel,
|
|
|
|
JoinType jointype,
|
|
|
|
List *restrictlist);
|
2000-02-07 05:41:04 +01:00
|
|
|
|
|
|
|
/*
|
|
|
|
* joinrels.c
|
|
|
|
* routines to determine which relations to join
|
|
|
|
*/
|
2000-09-12 23:07:18 +02:00
|
|
|
extern List *make_rels_by_joins(Query *root, int level, List **joinrels);
|
|
|
|
extern List *make_rels_by_clause_joins(Query *root,
|
|
|
|
RelOptInfo *old_rel,
|
|
|
|
List *other_rels);
|
|
|
|
extern List *make_rels_by_clauseless_joins(Query *root,
|
|
|
|
RelOptInfo *old_rel,
|
|
|
|
List *other_rels);
|
2000-09-29 20:21:41 +02:00
|
|
|
extern RelOptInfo *make_jointree_rel(Query *root, Node *jtnode);
|
1997-09-07 07:04:48 +02:00
|
|
|
|
1996-07-09 08:22:35 +02:00
|
|
|
/*
|
1999-08-16 04:17:58 +02:00
|
|
|
* pathkeys.c
|
|
|
|
* utilities for matching and building path keys
|
1996-07-09 08:22:35 +02:00
|
|
|
*/
|
1999-08-16 04:17:58 +02:00
|
|
|
typedef enum
|
|
|
|
{
|
|
|
|
PATHKEYS_EQUAL, /* pathkeys are identical */
|
|
|
|
PATHKEYS_BETTER1, /* pathkey 1 is a superset of pathkey 2 */
|
|
|
|
PATHKEYS_BETTER2, /* vice versa */
|
|
|
|
PATHKEYS_DIFFERENT /* neither pathkey includes the other */
|
|
|
|
} PathKeysComparison;
|
1996-07-09 08:22:35 +02:00
|
|
|
|
2000-02-15 21:49:31 +01:00
|
|
|
extern void add_equijoined_keys(Query *root, RestrictInfo *restrictinfo);
|
2000-07-24 05:11:01 +02:00
|
|
|
extern void generate_implied_equalities(Query *root);
|
2000-02-15 21:49:31 +01:00
|
|
|
extern List *canonicalize_pathkeys(Query *root, List *pathkeys);
|
1999-08-16 04:17:58 +02:00
|
|
|
extern PathKeysComparison compare_pathkeys(List *keys1, List *keys2);
|
|
|
|
extern bool pathkeys_contained_in(List *keys1, List *keys2);
|
2000-12-14 23:30:45 +01:00
|
|
|
extern PathKeysComparison compare_noncanonical_pathkeys(List *keys1,
|
|
|
|
List *keys2);
|
|
|
|
extern bool noncanonical_pathkeys_contained_in(List *keys1, List *keys2);
|
1999-08-21 05:49:17 +02:00
|
|
|
extern Path *get_cheapest_path_for_pathkeys(List *paths, List *pathkeys,
|
2000-04-12 19:17:23 +02:00
|
|
|
CostSelector cost_criterion);
|
2000-02-15 21:49:31 +01:00
|
|
|
extern Path *get_cheapest_fractional_path_for_pathkeys(List *paths,
|
2000-04-12 19:17:23 +02:00
|
|
|
List *pathkeys,
|
|
|
|
double fraction);
|
1999-08-16 04:17:58 +02:00
|
|
|
extern List *build_index_pathkeys(Query *root, RelOptInfo *rel,
|
2000-04-12 19:17:23 +02:00
|
|
|
IndexOptInfo *index,
|
|
|
|
ScanDirection scandir);
|
2000-12-14 23:30:45 +01:00
|
|
|
extern List *build_join_pathkeys(Query *root,
|
|
|
|
RelOptInfo *joinrel,
|
|
|
|
List *outer_pathkeys);
|
1999-08-21 05:49:17 +02:00
|
|
|
extern List *make_pathkeys_for_sortclauses(List *sortclauses,
|
2000-04-12 19:17:23 +02:00
|
|
|
List *tlist);
|
2000-12-14 23:30:45 +01:00
|
|
|
extern List *find_mergeclauses_for_pathkeys(Query *root,
|
|
|
|
List *pathkeys,
|
|
|
|
List *restrictinfos);
|
2000-02-15 21:49:31 +01:00
|
|
|
extern List *make_pathkeys_for_mergeclauses(Query *root,
|
2000-09-12 23:07:18 +02:00
|
|
|
List *mergeclauses,
|
|
|
|
RelOptInfo *rel);
|
2000-12-14 23:30:45 +01:00
|
|
|
extern int pathkeys_useful_for_merging(Query *root,
|
|
|
|
RelOptInfo *rel,
|
|
|
|
List *pathkeys);
|
|
|
|
extern int pathkeys_useful_for_ordering(Query *root, List *pathkeys);
|
|
|
|
extern List *truncate_useless_pathkeys(Query *root,
|
|
|
|
RelOptInfo *rel,
|
|
|
|
List *pathkeys);
|
1996-07-09 08:22:35 +02:00
|
|
|
|
1998-09-01 06:40:42 +02:00
|
|
|
#endif /* PATHS_H */
|