mirror of
https://github.com/postgres/postgres.git
synced 2025-12-19 17:02:53 +03:00
Allow private state in certain planner data structures.
Extension that make extensive use of planner hooks may want to
coordinate their efforts, for example to avoid duplicate computation,
but that's currently difficult because there's no really good way to
pass data between different hooks.
To make that easier, allow for storage of extension-managed private
state in PlannerGlobal, PlannerInfo, and RelOptInfo, along very
similar lines to what we have permitted for ExplainState since commit
c65bc2e1d1.
Reviewed-by: Andrei Lepikhov <lepihov@gmail.com>
Reviewed-by: Melanie Plageman <melanieplageman@gmail.com>
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: http://postgr.es/m/CA+TgmoYWKHU2hKr62Toyzh-kTDEnMDeLw7gkOOnjL-TnOUq0kQ@mail.gmail.com
This commit is contained in:
@@ -185,6 +185,10 @@ typedef struct PlannerGlobal
|
||||
|
||||
/* hash table for NOT NULL attnums of relations */
|
||||
struct HTAB *rel_notnullatts_hash pg_node_attr(read_write_ignore);
|
||||
|
||||
/* extension state */
|
||||
void **extension_state pg_node_attr(read_write_ignore);
|
||||
int extension_state_allocated;
|
||||
} PlannerGlobal;
|
||||
|
||||
/* macro for fetching the Plan associated with a SubPlan node */
|
||||
@@ -586,6 +590,10 @@ struct PlannerInfo
|
||||
|
||||
/* PartitionPruneInfos added in this query's plan. */
|
||||
List *partPruneInfos;
|
||||
|
||||
/* extension state */
|
||||
void **extension_state pg_node_attr(read_write_ignore);
|
||||
int extension_state_allocated;
|
||||
};
|
||||
|
||||
|
||||
@@ -1097,6 +1105,10 @@ typedef struct RelOptInfo
|
||||
List **partexprs pg_node_attr(read_write_ignore);
|
||||
/* Nullable partition key expressions */
|
||||
List **nullable_partexprs pg_node_attr(read_write_ignore);
|
||||
|
||||
/* extension state */
|
||||
void **extension_state pg_node_attr(read_write_ignore);
|
||||
int extension_state_allocated;
|
||||
} RelOptInfo;
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user