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 * 39 14886 : GetPlannerInfoExtensionState(PlannerInfo *root, int extension_id) 40 : { 41 : Assert(extension_id >= 0); 42 : 43 14886 : if (extension_id >= root->extension_state_allocated) 44 0 : return NULL; 45 : 46 14886 : 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