1 | /*------------------------------------------------------------------------- |
2 | * |
3 | * plancat.h |
4 | * prototypes for plancat.c. |
5 | * |
6 | * |
7 | * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group |
8 | * Portions Copyright (c) 1994, Regents of the University of California |
9 | * |
10 | * src/include/optimizer/plancat.h |
11 | * |
12 | *------------------------------------------------------------------------- |
13 | */ |
14 | #ifndef PLANCAT_H |
15 | #define PLANCAT_H |
16 | |
17 | #include "nodes/pathnodes.h" |
18 | #include "utils/relcache.h" |
19 | |
20 | /* Hook for plugins to get control in get_relation_info() */ |
21 | typedef void (*get_relation_info_hook_type) (PlannerInfo *root, |
22 | Oid relationObjectId, |
23 | bool inhparent, |
24 | RelOptInfo *rel); |
25 | extern PGDLLIMPORT get_relation_info_hook_type get_relation_info_hook; |
26 | |
27 | |
28 | extern void get_relation_info(PlannerInfo *root, Oid relationObjectId, |
29 | bool inhparent, RelOptInfo *rel); |
30 | |
31 | extern List *infer_arbiter_indexes(PlannerInfo *root); |
32 | |
33 | extern void estimate_rel_size(Relation rel, int32 *attr_widths, |
34 | BlockNumber *pages, double *tuples, double *allvisfrac); |
35 | |
36 | extern int32 get_rel_data_width(Relation rel, int32 *attr_widths); |
37 | extern int32 get_relation_data_width(Oid relid, int32 *attr_widths); |
38 | |
39 | extern bool relation_excluded_by_constraints(PlannerInfo *root, |
40 | RelOptInfo *rel, RangeTblEntry *rte); |
41 | |
42 | extern List *build_physical_tlist(PlannerInfo *root, RelOptInfo *rel); |
43 | |
44 | extern bool has_unique_index(RelOptInfo *rel, AttrNumber attno); |
45 | |
46 | extern Selectivity restriction_selectivity(PlannerInfo *root, |
47 | Oid operatorid, |
48 | List *args, |
49 | Oid inputcollid, |
50 | int varRelid); |
51 | |
52 | extern Selectivity join_selectivity(PlannerInfo *root, |
53 | Oid operatorid, |
54 | List *args, |
55 | Oid inputcollid, |
56 | JoinType jointype, |
57 | SpecialJoinInfo *sjinfo); |
58 | |
59 | extern Selectivity function_selectivity(PlannerInfo *root, |
60 | Oid funcid, |
61 | List *args, |
62 | Oid inputcollid, |
63 | bool is_join, |
64 | int varRelid, |
65 | JoinType jointype, |
66 | SpecialJoinInfo *sjinfo); |
67 | |
68 | extern void add_function_cost(PlannerInfo *root, Oid funcid, Node *node, |
69 | QualCost *cost); |
70 | |
71 | extern double get_function_rows(PlannerInfo *root, Oid funcid, Node *node); |
72 | |
73 | extern bool has_row_triggers(PlannerInfo *root, Index rti, CmdType event); |
74 | |
75 | extern bool has_stored_generated_columns(PlannerInfo *root, Index rti); |
76 | |
77 | #endif /* PLANCAT_H */ |
78 | |