Age Owner Branch data TLA Line data Source code
1 : : /*-------------------------------------------------------------------------
2 : : *
3 : : * extendplan.h
4 : : * Extend core planner objects with additional private state
5 : : *
6 : : *
7 : : * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
8 : : * Portions Copyright (c) 1994, Regents of the University of California
9 : : *
10 : : * src/include/optimizer/extendplan.h
11 : : *
12 : : *-------------------------------------------------------------------------
13 : : */
14 : : #ifndef EXTENDPLAN_H
15 : : #define EXTENDPLAN_H
16 : :
17 : : #include "nodes/pathnodes.h"
18 : :
19 : : extern int GetPlannerExtensionId(const char *extension_name);
20 : :
21 : : /*
22 : : * Get extension-specific state from a PlannerGlobal.
23 : : */
24 : : static inline void *
25 : : GetPlannerGlobalExtensionState(PlannerGlobal *glob, int extension_id)
26 : : {
27 : : Assert(extension_id >= 0);
28 : :
29 : : if (extension_id >= glob->extension_state_allocated)
30 : : return NULL;
31 : :
32 : : return glob->extension_state[extension_id];
33 : : }
34 : :
35 : : /*
36 : : * Get extension-specific state from a PlannerInfo.
37 : : */
38 : : static inline void *
20 rhaas@postgresql.org 39 :GNC 7443 : GetPlannerInfoExtensionState(PlannerInfo *root, int extension_id)
40 : : {
41 [ - + ]: 7443 : Assert(extension_id >= 0);
42 : :
43 [ - + ]: 7443 : if (extension_id >= root->extension_state_allocated)
20 rhaas@postgresql.org 44 :UNC 0 : return NULL;
45 : :
20 rhaas@postgresql.org 46 :GNC 7443 : return root->extension_state[extension_id];
47 : : }
48 : :
49 : : /*
50 : : * Get extension-specific state from a PlannerInfo.
51 : : */
52 : : static inline void *
53 : : GetRelOptInfoExtensionState(RelOptInfo *rel, int extension_id)
54 : : {
55 : : Assert(extension_id >= 0);
56 : :
57 : : if (extension_id >= rel->extension_state_allocated)
58 : : return NULL;
59 : :
60 : : return rel->extension_state[extension_id];
61 : : }
62 : :
63 : : /* Functions to store private state into various planner objects */
64 : : extern void SetPlannerGlobalExtensionState(PlannerGlobal *glob,
65 : : int extension_id,
66 : : void *opaque);
67 : : extern void SetPlannerInfoExtensionState(PlannerInfo *root, int extension_id,
68 : : void *opaque);
69 : : extern void SetRelOptInfoExtensionState(RelOptInfo *rel, int extension_id,
70 : : void *opaque);
71 : :
72 : : #endif
|