mirror of
https://git.postgresql.org/git/postgresql.git
synced 2026-02-12 17:37:07 +08:00
This commit adds query_string argument into the planner-related functions and hook and allows us to pass the query string to them. Currently there is no user of the query string passed. But the upcoming patch for the planning counters will add the planning hook function into pg_stat_statements and the function will need the query string. So this change will be necessary for that patch. Also this change is useful for some extensions that want to use the query string in their planner hook function. Author: Pascal Legrand, Julien Rouhaud Reviewed-by: Yoshikazu Imai, Tom Lane, Fujii Masao Discussion: https://postgr.es/m/CAOBaU_bU1m3_XF5qKYtSj1ua4dxd=FWDyh2SH4rSJAUUfsGmAQ@mail.gmail.com Discussion: https://postgr.es/m/1583789487074-0.post@n3.nabble.com
62 lines
2.0 KiB
C
62 lines
2.0 KiB
C
/*-------------------------------------------------------------------------
|
|
*
|
|
* planner.h
|
|
* prototypes for planner.c.
|
|
*
|
|
* Note that the primary entry points for planner.c are declared in
|
|
* optimizer/optimizer.h, because they're intended to be called from
|
|
* non-planner code. Declarations here are meant for use by other
|
|
* planner modules.
|
|
*
|
|
* Portions Copyright (c) 1996-2020, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/optimizer/planner.h
|
|
*
|
|
*-------------------------------------------------------------------------
|
|
*/
|
|
#ifndef PLANNER_H
|
|
#define PLANNER_H
|
|
|
|
#include "nodes/pathnodes.h"
|
|
#include "nodes/plannodes.h"
|
|
|
|
|
|
/* Hook for plugins to get control in planner() */
|
|
typedef PlannedStmt *(*planner_hook_type) (Query *parse,
|
|
const char *query_string,
|
|
int cursorOptions,
|
|
ParamListInfo boundParams);
|
|
extern PGDLLIMPORT planner_hook_type planner_hook;
|
|
|
|
/* Hook for plugins to get control when grouping_planner() plans upper rels */
|
|
typedef void (*create_upper_paths_hook_type) (PlannerInfo *root,
|
|
UpperRelationKind stage,
|
|
RelOptInfo *input_rel,
|
|
RelOptInfo *output_rel,
|
|
void *extra);
|
|
extern PGDLLIMPORT create_upper_paths_hook_type create_upper_paths_hook;
|
|
|
|
|
|
extern PlannedStmt *standard_planner(Query *parse, const char *query_string,
|
|
int cursorOptions,
|
|
ParamListInfo boundParams);
|
|
|
|
extern PlannerInfo *subquery_planner(PlannerGlobal *glob, Query *parse,
|
|
PlannerInfo *parent_root,
|
|
bool hasRecursion, double tuple_fraction);
|
|
|
|
extern RowMarkType select_rowmark_type(RangeTblEntry *rte,
|
|
LockClauseStrength strength);
|
|
|
|
extern bool limit_needed(Query *parse);
|
|
|
|
extern void mark_partial_aggref(Aggref *agg, AggSplit aggsplit);
|
|
|
|
extern Path *get_cheapest_fractional_path(RelOptInfo *rel,
|
|
double tuple_fraction);
|
|
|
|
extern Expr *preprocess_phv_expression(PlannerInfo *root, Expr *expr);
|
|
|
|
#endif /* PLANNER_H */
|