gooderp18绿色标准版
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

116 lines
4.1KB

  1. /*-------------------------------------------------------------------------
  2. *
  3. * planmain.h
  4. * prototypes for various files in optimizer/plan
  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/planmain.h
  11. *
  12. *-------------------------------------------------------------------------
  13. */
  14. #ifndef PLANMAIN_H
  15. #define PLANMAIN_H
  16. #include "nodes/pathnodes.h"
  17. #include "nodes/plannodes.h"
  18. /* GUC parameters */
  19. #define DEFAULT_CURSOR_TUPLE_FRACTION 0.1
  20. extern double cursor_tuple_fraction;
  21. /* query_planner callback to compute query_pathkeys */
  22. typedef void (*query_pathkeys_callback) (PlannerInfo *root, void *extra);
  23. /*
  24. * prototypes for plan/planmain.c
  25. */
  26. extern RelOptInfo *query_planner(PlannerInfo *root,
  27. query_pathkeys_callback qp_callback, void *qp_extra);
  28. /*
  29. * prototypes for plan/planagg.c
  30. */
  31. extern void preprocess_minmax_aggregates(PlannerInfo *root);
  32. /*
  33. * prototypes for plan/createplan.c
  34. */
  35. extern Plan *create_plan(PlannerInfo *root, Path *best_path);
  36. extern ForeignScan *make_foreignscan(List *qptlist, List *qpqual,
  37. Index scanrelid, List *fdw_exprs, List *fdw_private,
  38. List *fdw_scan_tlist, List *fdw_recheck_quals,
  39. Plan *outer_plan);
  40. extern Plan *change_plan_targetlist(Plan *subplan, List *tlist,
  41. bool tlist_parallel_safe);
  42. extern Plan *materialize_finished_plan(Plan *subplan);
  43. extern bool is_projection_capable_path(Path *path);
  44. extern bool is_projection_capable_plan(Plan *plan);
  45. /* External use of these functions is deprecated: */
  46. extern Sort *make_sort_from_sortclauses(List *sortcls, Plan *lefttree);
  47. extern Agg *make_agg(List *tlist, List *qual,
  48. AggStrategy aggstrategy, AggSplit aggsplit,
  49. int numGroupCols, AttrNumber *grpColIdx, Oid *grpOperators, Oid *grpCollations,
  50. List *groupingSets, List *chain,
  51. double dNumGroups, Plan *lefttree);
  52. extern Limit *make_limit(Plan *lefttree, Node *limitOffset, Node *limitCount);
  53. /*
  54. * prototypes for plan/initsplan.c
  55. */
  56. extern int from_collapse_limit;
  57. extern int join_collapse_limit;
  58. extern void add_base_rels_to_query(PlannerInfo *root, Node *jtnode);
  59. extern void add_other_rels_to_query(PlannerInfo *root);
  60. extern void build_base_rel_tlists(PlannerInfo *root, List *final_tlist);
  61. extern void add_vars_to_targetlist(PlannerInfo *root, List *vars,
  62. Relids where_needed, bool create_new_ph);
  63. extern void find_lateral_references(PlannerInfo *root);
  64. extern void create_lateral_join_info(PlannerInfo *root);
  65. extern List *deconstruct_jointree(PlannerInfo *root);
  66. extern void distribute_restrictinfo_to_rels(PlannerInfo *root,
  67. RestrictInfo *restrictinfo);
  68. extern void process_implied_equality(PlannerInfo *root,
  69. Oid opno,
  70. Oid collation,
  71. Expr *item1,
  72. Expr *item2,
  73. Relids qualscope,
  74. Relids nullable_relids,
  75. Index security_level,
  76. bool below_outer_join,
  77. bool both_const);
  78. extern RestrictInfo *build_implied_join_equality(Oid opno,
  79. Oid collation,
  80. Expr *item1,
  81. Expr *item2,
  82. Relids qualscope,
  83. Relids nullable_relids,
  84. Index security_level);
  85. extern void match_foreign_keys_to_quals(PlannerInfo *root);
  86. /*
  87. * prototypes for plan/analyzejoins.c
  88. */
  89. extern List *remove_useless_joins(PlannerInfo *root, List *joinlist);
  90. extern void reduce_unique_semijoins(PlannerInfo *root);
  91. extern bool query_supports_distinctness(Query *query);
  92. extern bool query_is_distinct_for(Query *query, List *colnos, List *opids);
  93. extern bool innerrel_is_unique(PlannerInfo *root,
  94. Relids joinrelids, Relids outerrelids, RelOptInfo *innerrel,
  95. JoinType jointype, List *restrictlist, bool force_cache);
  96. /*
  97. * prototypes for plan/setrefs.c
  98. */
  99. extern Plan *set_plan_references(PlannerInfo *root, Plan *plan);
  100. extern void record_plan_function_dependency(PlannerInfo *root, Oid funcid);
  101. extern void record_plan_type_dependency(PlannerInfo *root, Oid typid);
  102. extern bool extract_query_dependencies_walker(Node *node, PlannerInfo *root);
  103. #endif /* PLANMAIN_H */
上海开阖软件有限公司 沪ICP备12045867号-1