gooderp18绿色标准版
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

319 行
12KB

  1. /*-------------------------------------------------------------------------
  2. *
  3. * pathnode.h
  4. * prototypes for pathnode.c, relnode.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/pathnode.h
  11. *
  12. *-------------------------------------------------------------------------
  13. */
  14. #ifndef PATHNODE_H
  15. #define PATHNODE_H
  16. #include "nodes/bitmapset.h"
  17. #include "nodes/pathnodes.h"
  18. /*
  19. * prototypes for pathnode.c
  20. */
  21. extern int compare_path_costs(Path *path1, Path *path2,
  22. CostSelector criterion);
  23. extern int compare_fractional_path_costs(Path *path1, Path *path2,
  24. double fraction);
  25. extern void set_cheapest(RelOptInfo *parent_rel);
  26. extern void add_path(RelOptInfo *parent_rel, Path *new_path);
  27. extern bool add_path_precheck(RelOptInfo *parent_rel,
  28. Cost startup_cost, Cost total_cost,
  29. List *pathkeys, Relids required_outer);
  30. extern void add_partial_path(RelOptInfo *parent_rel, Path *new_path);
  31. extern bool add_partial_path_precheck(RelOptInfo *parent_rel,
  32. Cost total_cost, List *pathkeys);
  33. extern Path *create_seqscan_path(PlannerInfo *root, RelOptInfo *rel,
  34. Relids required_outer, int parallel_workers);
  35. extern Path *create_samplescan_path(PlannerInfo *root, RelOptInfo *rel,
  36. Relids required_outer);
  37. extern IndexPath *create_index_path(PlannerInfo *root,
  38. IndexOptInfo *index,
  39. List *indexclauses,
  40. List *indexorderbys,
  41. List *indexorderbycols,
  42. List *pathkeys,
  43. ScanDirection indexscandir,
  44. bool indexonly,
  45. Relids required_outer,
  46. double loop_count,
  47. bool partial_path);
  48. extern BitmapHeapPath *create_bitmap_heap_path(PlannerInfo *root,
  49. RelOptInfo *rel,
  50. Path *bitmapqual,
  51. Relids required_outer,
  52. double loop_count,
  53. int parallel_degree);
  54. extern BitmapAndPath *create_bitmap_and_path(PlannerInfo *root,
  55. RelOptInfo *rel,
  56. List *bitmapquals);
  57. extern BitmapOrPath *create_bitmap_or_path(PlannerInfo *root,
  58. RelOptInfo *rel,
  59. List *bitmapquals);
  60. extern TidPath *create_tidscan_path(PlannerInfo *root, RelOptInfo *rel,
  61. List *tidquals, Relids required_outer);
  62. extern AppendPath *create_append_path(PlannerInfo *root, RelOptInfo *rel,
  63. List *subpaths, List *partial_subpaths,
  64. List *pathkeys, Relids required_outer,
  65. int parallel_workers, bool parallel_aware,
  66. List *partitioned_rels, double rows);
  67. extern MergeAppendPath *create_merge_append_path(PlannerInfo *root,
  68. RelOptInfo *rel,
  69. List *subpaths,
  70. List *pathkeys,
  71. Relids required_outer,
  72. List *partitioned_rels);
  73. extern GroupResultPath *create_group_result_path(PlannerInfo *root,
  74. RelOptInfo *rel,
  75. PathTarget *target,
  76. List *havingqual);
  77. extern MaterialPath *create_material_path(RelOptInfo *rel, Path *subpath);
  78. extern UniquePath *create_unique_path(PlannerInfo *root, RelOptInfo *rel,
  79. Path *subpath, SpecialJoinInfo *sjinfo);
  80. extern GatherPath *create_gather_path(PlannerInfo *root,
  81. RelOptInfo *rel, Path *subpath, PathTarget *target,
  82. Relids required_outer, double *rows);
  83. extern GatherMergePath *create_gather_merge_path(PlannerInfo *root,
  84. RelOptInfo *rel,
  85. Path *subpath,
  86. PathTarget *target,
  87. List *pathkeys,
  88. Relids required_outer,
  89. double *rows);
  90. extern SubqueryScanPath *create_subqueryscan_path(PlannerInfo *root,
  91. RelOptInfo *rel, Path *subpath,
  92. List *pathkeys, Relids required_outer);
  93. extern Path *create_functionscan_path(PlannerInfo *root, RelOptInfo *rel,
  94. List *pathkeys, Relids required_outer);
  95. extern Path *create_valuesscan_path(PlannerInfo *root, RelOptInfo *rel,
  96. Relids required_outer);
  97. extern Path *create_tablefuncscan_path(PlannerInfo *root, RelOptInfo *rel,
  98. Relids required_outer);
  99. extern Path *create_ctescan_path(PlannerInfo *root, RelOptInfo *rel,
  100. Relids required_outer);
  101. extern Path *create_namedtuplestorescan_path(PlannerInfo *root, RelOptInfo *rel,
  102. Relids required_outer);
  103. extern Path *create_resultscan_path(PlannerInfo *root, RelOptInfo *rel,
  104. Relids required_outer);
  105. extern Path *create_worktablescan_path(PlannerInfo *root, RelOptInfo *rel,
  106. Relids required_outer);
  107. extern ForeignPath *create_foreignscan_path(PlannerInfo *root, RelOptInfo *rel,
  108. PathTarget *target,
  109. double rows, Cost startup_cost, Cost total_cost,
  110. List *pathkeys,
  111. Relids required_outer,
  112. Path *fdw_outerpath,
  113. List *fdw_private);
  114. extern ForeignPath *create_foreign_join_path(PlannerInfo *root, RelOptInfo *rel,
  115. PathTarget *target,
  116. double rows, Cost startup_cost, Cost total_cost,
  117. List *pathkeys,
  118. Relids required_outer,
  119. Path *fdw_outerpath,
  120. List *fdw_private);
  121. extern ForeignPath *create_foreign_upper_path(PlannerInfo *root, RelOptInfo *rel,
  122. PathTarget *target,
  123. double rows, Cost startup_cost, Cost total_cost,
  124. List *pathkeys,
  125. Path *fdw_outerpath,
  126. List *fdw_private);
  127. extern Relids calc_nestloop_required_outer(Relids outerrelids,
  128. Relids outer_paramrels,
  129. Relids innerrelids,
  130. Relids inner_paramrels);
  131. extern Relids calc_non_nestloop_required_outer(Path *outer_path, Path *inner_path);
  132. extern NestPath *create_nestloop_path(PlannerInfo *root,
  133. RelOptInfo *joinrel,
  134. JoinType jointype,
  135. JoinCostWorkspace *workspace,
  136. JoinPathExtraData *extra,
  137. Path *outer_path,
  138. Path *inner_path,
  139. List *restrict_clauses,
  140. List *pathkeys,
  141. Relids required_outer);
  142. extern MergePath *create_mergejoin_path(PlannerInfo *root,
  143. RelOptInfo *joinrel,
  144. JoinType jointype,
  145. JoinCostWorkspace *workspace,
  146. JoinPathExtraData *extra,
  147. Path *outer_path,
  148. Path *inner_path,
  149. List *restrict_clauses,
  150. List *pathkeys,
  151. Relids required_outer,
  152. List *mergeclauses,
  153. List *outersortkeys,
  154. List *innersortkeys);
  155. extern HashPath *create_hashjoin_path(PlannerInfo *root,
  156. RelOptInfo *joinrel,
  157. JoinType jointype,
  158. JoinCostWorkspace *workspace,
  159. JoinPathExtraData *extra,
  160. Path *outer_path,
  161. Path *inner_path,
  162. bool parallel_hash,
  163. List *restrict_clauses,
  164. Relids required_outer,
  165. List *hashclauses);
  166. extern ProjectionPath *create_projection_path(PlannerInfo *root,
  167. RelOptInfo *rel,
  168. Path *subpath,
  169. PathTarget *target);
  170. extern Path *apply_projection_to_path(PlannerInfo *root,
  171. RelOptInfo *rel,
  172. Path *path,
  173. PathTarget *target);
  174. extern ProjectSetPath *create_set_projection_path(PlannerInfo *root,
  175. RelOptInfo *rel,
  176. Path *subpath,
  177. PathTarget *target);
  178. extern SortPath *create_sort_path(PlannerInfo *root,
  179. RelOptInfo *rel,
  180. Path *subpath,
  181. List *pathkeys,
  182. double limit_tuples);
  183. extern GroupPath *create_group_path(PlannerInfo *root,
  184. RelOptInfo *rel,
  185. Path *subpath,
  186. List *groupClause,
  187. List *qual,
  188. double numGroups);
  189. extern UpperUniquePath *create_upper_unique_path(PlannerInfo *root,
  190. RelOptInfo *rel,
  191. Path *subpath,
  192. int numCols,
  193. double numGroups);
  194. extern AggPath *create_agg_path(PlannerInfo *root,
  195. RelOptInfo *rel,
  196. Path *subpath,
  197. PathTarget *target,
  198. AggStrategy aggstrategy,
  199. AggSplit aggsplit,
  200. List *groupClause,
  201. List *qual,
  202. const AggClauseCosts *aggcosts,
  203. double numGroups);
  204. extern GroupingSetsPath *create_groupingsets_path(PlannerInfo *root,
  205. RelOptInfo *rel,
  206. Path *subpath,
  207. List *having_qual,
  208. AggStrategy aggstrategy,
  209. List *rollups,
  210. const AggClauseCosts *agg_costs,
  211. double numGroups);
  212. extern MinMaxAggPath *create_minmaxagg_path(PlannerInfo *root,
  213. RelOptInfo *rel,
  214. PathTarget *target,
  215. List *mmaggregates,
  216. List *quals);
  217. extern WindowAggPath *create_windowagg_path(PlannerInfo *root,
  218. RelOptInfo *rel,
  219. Path *subpath,
  220. PathTarget *target,
  221. List *windowFuncs,
  222. WindowClause *winclause);
  223. extern SetOpPath *create_setop_path(PlannerInfo *root,
  224. RelOptInfo *rel,
  225. Path *subpath,
  226. SetOpCmd cmd,
  227. SetOpStrategy strategy,
  228. List *distinctList,
  229. AttrNumber flagColIdx,
  230. int firstFlag,
  231. double numGroups,
  232. double outputRows);
  233. extern RecursiveUnionPath *create_recursiveunion_path(PlannerInfo *root,
  234. RelOptInfo *rel,
  235. Path *leftpath,
  236. Path *rightpath,
  237. PathTarget *target,
  238. List *distinctList,
  239. int wtParam,
  240. double numGroups);
  241. extern LockRowsPath *create_lockrows_path(PlannerInfo *root, RelOptInfo *rel,
  242. Path *subpath, List *rowMarks, int epqParam);
  243. extern ModifyTablePath *create_modifytable_path(PlannerInfo *root,
  244. RelOptInfo *rel,
  245. CmdType operation, bool canSetTag,
  246. Index nominalRelation, Index rootRelation,
  247. bool partColsUpdated,
  248. List *resultRelations, List *subpaths,
  249. List *subroots,
  250. List *withCheckOptionLists, List *returningLists,
  251. List *rowMarks, OnConflictExpr *onconflict,
  252. int epqParam);
  253. extern LimitPath *create_limit_path(PlannerInfo *root, RelOptInfo *rel,
  254. Path *subpath,
  255. Node *limitOffset, Node *limitCount,
  256. int64 offset_est, int64 count_est);
  257. extern void adjust_limit_rows_costs(double *rows,
  258. Cost *startup_cost, Cost *total_cost,
  259. int64 offset_est, int64 count_est);
  260. extern Path *reparameterize_path(PlannerInfo *root, Path *path,
  261. Relids required_outer,
  262. double loop_count);
  263. extern Path *reparameterize_path_by_child(PlannerInfo *root, Path *path,
  264. RelOptInfo *child_rel);
  265. /*
  266. * prototypes for relnode.c
  267. */
  268. extern void setup_simple_rel_arrays(PlannerInfo *root);
  269. extern void setup_append_rel_array(PlannerInfo *root);
  270. extern void expand_planner_arrays(PlannerInfo *root, int add_size);
  271. extern RelOptInfo *build_simple_rel(PlannerInfo *root, int relid,
  272. RelOptInfo *parent);
  273. extern RelOptInfo *find_base_rel(PlannerInfo *root, int relid);
  274. extern RelOptInfo *find_join_rel(PlannerInfo *root, Relids relids);
  275. extern RelOptInfo *build_join_rel(PlannerInfo *root,
  276. Relids joinrelids,
  277. RelOptInfo *outer_rel,
  278. RelOptInfo *inner_rel,
  279. SpecialJoinInfo *sjinfo,
  280. List **restrictlist_ptr);
  281. extern Relids min_join_parameterization(PlannerInfo *root,
  282. Relids joinrelids,
  283. RelOptInfo *outer_rel,
  284. RelOptInfo *inner_rel);
  285. extern RelOptInfo *fetch_upper_rel(PlannerInfo *root, UpperRelationKind kind,
  286. Relids relids);
  287. extern Relids find_childrel_parents(PlannerInfo *root, RelOptInfo *rel);
  288. extern ParamPathInfo *get_baserel_parampathinfo(PlannerInfo *root,
  289. RelOptInfo *baserel,
  290. Relids required_outer);
  291. extern ParamPathInfo *get_joinrel_parampathinfo(PlannerInfo *root,
  292. RelOptInfo *joinrel,
  293. Path *outer_path,
  294. Path *inner_path,
  295. SpecialJoinInfo *sjinfo,
  296. Relids required_outer,
  297. List **restrict_clauses);
  298. extern ParamPathInfo *get_appendrel_parampathinfo(RelOptInfo *appendrel,
  299. Relids required_outer);
  300. extern ParamPathInfo *find_param_path_info(RelOptInfo *rel,
  301. Relids required_outer);
  302. extern RelOptInfo *build_child_join_rel(PlannerInfo *root,
  303. RelOptInfo *outer_rel, RelOptInfo *inner_rel,
  304. RelOptInfo *parent_joinrel, List *restrictlist,
  305. SpecialJoinInfo *sjinfo, JoinType jointype);
  306. #endif /* PATHNODE_H */
上海开阖软件有限公司 沪ICP备12045867号-1