planmain.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. /*-------------------------------------------------------------------------
  2. *
  3. * planmain.h
  4. * prototypes for various files in optimizer/plan
  5. *
  6. *
  7. * Portions Copyright (c) 1996-2016, 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/plannodes.h"
  17. #include "nodes/relation.h"
  18. /* possible values for force_parallel_mode */
  19. typedef enum
  20. {
  21. FORCE_PARALLEL_OFF,
  22. FORCE_PARALLEL_ON,
  23. FORCE_PARALLEL_REGRESS
  24. } ForceParallelMode;
  25. /* GUC parameters */
  26. #define DEFAULT_CURSOR_TUPLE_FRACTION 0.1
  27. extern double cursor_tuple_fraction;
  28. extern int force_parallel_mode;
  29. /* query_planner callback to compute query_pathkeys */
  30. typedef void (*query_pathkeys_callback) (PlannerInfo *root, void *extra);
  31. /*
  32. * prototypes for plan/planmain.c
  33. */
  34. extern RelOptInfo *query_planner(PlannerInfo *root, List *tlist,
  35. query_pathkeys_callback qp_callback, void *qp_extra);
  36. /*
  37. * prototypes for plan/planagg.c
  38. */
  39. extern void preprocess_minmax_aggregates(PlannerInfo *root, List *tlist);
  40. /*
  41. * prototypes for plan/createplan.c
  42. */
  43. extern Plan *create_plan(PlannerInfo *root, Path *best_path);
  44. extern ForeignScan *make_foreignscan(List *qptlist, List *qpqual,
  45. Index scanrelid, List *fdw_exprs, List *fdw_private,
  46. List *fdw_scan_tlist, List *fdw_recheck_quals,
  47. Plan *outer_plan);
  48. extern Plan *materialize_finished_plan(Plan *subplan);
  49. extern bool is_projection_capable_path(Path *path);
  50. extern bool is_projection_capable_plan(Plan *plan);
  51. /* External use of these functions is deprecated: */
  52. extern Sort *make_sort_from_sortclauses(List *sortcls, Plan *lefttree);
  53. extern Agg *make_agg(List *tlist, List *qual,
  54. AggStrategy aggstrategy, AggSplit aggsplit,
  55. int numGroupCols, AttrNumber *grpColIdx, Oid *grpOperators,
  56. List *groupingSets, List *chain,
  57. double dNumGroups, Plan *lefttree);
  58. extern Limit *make_limit(Plan *lefttree, Node *limitOffset, Node *limitCount);
  59. /*
  60. * prototypes for plan/initsplan.c
  61. */
  62. extern int from_collapse_limit;
  63. extern int join_collapse_limit;
  64. extern void add_base_rels_to_query(PlannerInfo *root, Node *jtnode);
  65. extern void build_base_rel_tlists(PlannerInfo *root, List *final_tlist);
  66. extern void add_vars_to_targetlist(PlannerInfo *root, List *vars,
  67. Relids where_needed, bool create_new_ph);
  68. extern void find_lateral_references(PlannerInfo *root);
  69. extern void create_lateral_join_info(PlannerInfo *root);
  70. extern List *deconstruct_jointree(PlannerInfo *root);
  71. extern void distribute_restrictinfo_to_rels(PlannerInfo *root,
  72. RestrictInfo *restrictinfo);
  73. extern void process_implied_equality(PlannerInfo *root,
  74. Oid opno,
  75. Oid collation,
  76. Expr *item1,
  77. Expr *item2,
  78. Relids qualscope,
  79. Relids nullable_relids,
  80. bool below_outer_join,
  81. bool both_const);
  82. extern RestrictInfo *build_implied_join_equality(Oid opno,
  83. Oid collation,
  84. Expr *item1,
  85. Expr *item2,
  86. Relids qualscope,
  87. Relids nullable_relids);
  88. extern void match_foreign_keys_to_quals(PlannerInfo *root);
  89. /*
  90. * prototypes for plan/analyzejoins.c
  91. */
  92. extern List *remove_useless_joins(PlannerInfo *root, List *joinlist);
  93. extern bool query_supports_distinctness(Query *query);
  94. extern bool query_is_distinct_for(Query *query, List *colnos, List *opids);
  95. /*
  96. * prototypes for plan/setrefs.c
  97. */
  98. extern Plan *set_plan_references(PlannerInfo *root, Plan *plan);
  99. extern void record_plan_function_dependency(PlannerInfo *root, Oid funcid);
  100. extern void extract_query_dependencies(Node *query,
  101. List **relationOids,
  102. List **invalItems,
  103. bool *hasRowSecurity);
  104. #endif /* PLANMAIN_H */