planmain.h 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /*-------------------------------------------------------------------------
  2. *
  3. * planmain.h
  4. * prototypes for various files in optimizer/plan
  5. *
  6. *
  7. * Portions Copyright (c) 1996-2022, 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 PGDLLIMPORT 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, double dNumGroups,
  51. Size transitionSpace, Plan *lefttree);
  52. extern Limit *make_limit(Plan *lefttree, Node *limitOffset, Node *limitCount,
  53. LimitOption limitOption, int uniqNumCols,
  54. AttrNumber *uniqColIdx, Oid *uniqOperators,
  55. Oid *uniqCollations);
  56. /*
  57. * prototypes for plan/initsplan.c
  58. */
  59. extern PGDLLIMPORT int from_collapse_limit;
  60. extern PGDLLIMPORT int join_collapse_limit;
  61. extern void add_base_rels_to_query(PlannerInfo *root, Node *jtnode);
  62. extern void add_other_rels_to_query(PlannerInfo *root);
  63. extern void build_base_rel_tlists(PlannerInfo *root, List *final_tlist);
  64. extern void add_vars_to_targetlist(PlannerInfo *root, List *vars,
  65. Relids where_needed, bool create_new_ph);
  66. extern void find_lateral_references(PlannerInfo *root);
  67. extern void create_lateral_join_info(PlannerInfo *root);
  68. extern List *deconstruct_jointree(PlannerInfo *root);
  69. extern void distribute_restrictinfo_to_rels(PlannerInfo *root,
  70. RestrictInfo *restrictinfo);
  71. extern RestrictInfo *process_implied_equality(PlannerInfo *root,
  72. Oid opno,
  73. Oid collation,
  74. Expr *item1,
  75. Expr *item2,
  76. Relids qualscope,
  77. Relids nullable_relids,
  78. Index security_level,
  79. bool below_outer_join,
  80. bool both_const);
  81. extern RestrictInfo *build_implied_join_equality(PlannerInfo *root,
  82. Oid opno,
  83. Oid collation,
  84. Expr *item1,
  85. Expr *item2,
  86. Relids qualscope,
  87. Relids nullable_relids,
  88. Index security_level);
  89. extern void match_foreign_keys_to_quals(PlannerInfo *root);
  90. /*
  91. * prototypes for plan/analyzejoins.c
  92. */
  93. extern List *remove_useless_joins(PlannerInfo *root, List *joinlist);
  94. extern void reduce_unique_semijoins(PlannerInfo *root);
  95. extern bool query_supports_distinctness(Query *query);
  96. extern bool query_is_distinct_for(Query *query, List *colnos, List *opids);
  97. extern bool innerrel_is_unique(PlannerInfo *root,
  98. Relids joinrelids, Relids outerrelids, RelOptInfo *innerrel,
  99. JoinType jointype, List *restrictlist, bool force_cache);
  100. /*
  101. * prototypes for plan/setrefs.c
  102. */
  103. extern Plan *set_plan_references(PlannerInfo *root, Plan *plan);
  104. extern bool trivial_subqueryscan(SubqueryScan *plan);
  105. extern void record_plan_function_dependency(PlannerInfo *root, Oid funcid);
  106. extern void record_plan_type_dependency(PlannerInfo *root, Oid typid);
  107. extern bool extract_query_dependencies_walker(Node *node, PlannerInfo *root);
  108. #endif /* PLANMAIN_H */