Quelle params.h
Sprache: C
/*-------------------------------------------------------------------------
*
* params . h
* Support for finding the values associated with Param nodes .
*
*
* Portions Copyright ( c ) 1996 - 2025 , PostgreSQL Global Development Group
* Portions Copyright ( c ) 1994 , Regents of the University of California
*
* src / include / nodes / params . h
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
*/
#ifndef PARAMS_H
#define PARAMS_H
/* Forward declarations, to avoid including other headers */
struct Bitmapset;
struct ExprState;
struct Param;
struct ParseState;
/*
* ParamListInfo
*
* ParamListInfo structures are used to pass parameters into the executor
* for parameterized plans . We support two basic approaches to supplying
* parameter values , the " static " way and the " dynamic " way .
*
* In the static approach , per - parameter data is stored in an array of
* ParamExternData structs appended to the ParamListInfo struct .
* Each entry in the array defines the value to be substituted for a
* PARAM_EXTERN parameter . The " paramid " of a PARAM_EXTERN Param
* can range from 1 to numParams .
*
* Although parameter numbers are normally consecutive , we allow
* ptype = = InvalidOid to signal an unused array entry .
*
* pflags is a flags field . Currently the only used bit is :
* PARAM_FLAG_CONST signals the planner that it may treat this parameter
* as a constant ( i . e . , generate a plan that works only for this value
* of the parameter ) .
*
* In the dynamic approach , all access to parameter values is done through
* hook functions found in the ParamListInfo struct . In this case ,
* the ParamExternData array is typically unused and not allocated ;
* but the legal range of paramid is still 1 to numParams .
*
* Although the data structure is really an array , not a list , we keep
* the old typedef name to avoid unnecessary code changes .
*
* There are 3 hook functions that can be associated with a ParamListInfo
* structure :
*
* If paramFetch isn ' t null , it is called to fetch the ParamExternData
* for a particular param ID , rather than accessing the relevant element
* of the ParamExternData array . This supports the case where the array
* isn ' t there at all , as well as cases where the data in the array
* might be obsolete or lazily evaluated . paramFetch must return the
* address of a ParamExternData struct describing the specified param ID ;
* the convention above about ptype = = InvalidOid signaling an invalid
* param ID still applies . The returned struct can either be placed in
* the " workspace " supplied by the caller , or it can be in storage
* controlled by the paramFetch hook if that ' s more convenient .
* ( In either case , the struct is not expected to be long - lived . )
* If " speculative " is true , the paramFetch hook should not risk errors
* in trying to fetch the parameter value , and should report an invalid
* parameter instead .
*
* If paramCompile isn ' t null , then it controls what execExpr . c compiles
* for PARAM_EXTERN Param nodes - - - typically , this hook would emit a
* EEOP_PARAM_CALLBACK step . This allows unnecessary work to be
* optimized away in compiled expressions .
*
* If parserSetup isn ' t null , then it is called to re - instantiate the
* original parsing hooks when a query needs to be re - parsed / planned .
* This is especially useful if the types of parameters might change
* from time to time , since it can replace the need to supply a fixed
* list of parameter types to the parser .
*
* Notice that the paramFetch and paramCompile hooks are actually passed
* the ParamListInfo struct ' s address ; they can therefore access all
* three of the " arg " fields , and the distinction between paramFetchArg
* and paramCompileArg is rather arbitrary .
*/
#define PARAM_FLAG_CONST 0 x0001 /* parameter is constant */
typedef struct ParamExternData
{
Datum value; /* parameter value */
bool isnull; /* is it NULL? */
uint16 pflags; /* flag bits, see above */
Oid ptype; /* parameter's datatype, or 0 */
} ParamExternData;
typedef struct ParamListInfoData *ParamListInfo;
typedef ParamExternData *(*ParamFetchHook) (ParamListInfo params,
int paramid, bool speculative,
ParamExternData *workspace);
typedef void (*ParamCompileHook) (ParamListInfo params, struct Param *param,
struct ExprState *state,
Datum *resv, bool *resnull);
typedef void (*ParserSetupHook) (struct ParseState *pstate, void *arg);
typedef struct ParamListInfoData
{
ParamFetchHook paramFetch; /* parameter fetch hook */
void *paramFetchArg;
ParamCompileHook paramCompile; /* parameter compile hook */
void *paramCompileArg;
ParserSetupHook parserSetup; /* parser setup hook */
void *parserSetupArg;
char *paramValuesStr; /* params as a single string for errors */
int numParams; /* nominal/maximum # of Params represented */
/*
* params [ ] may be of length zero if paramFetch is supplied ; otherwise it
* must be of length numParams .
*/
ParamExternData params[FLEXIBLE_ARRAY_MEMBER];
} ParamListInfoData;
/* ----------------
* ParamExecData
*
* ParamExecData entries are used for executor internal parameters
* ( that is , values being passed into or out of a sub - query ) . The
* paramid of a PARAM_EXEC Param is a ( zero - based ) index into an
* array of ParamExecData records , which is referenced through
* es_param_exec_vals or ecxt_param_exec_vals .
*
* If execPlan is not NULL , it points to a SubPlanState node that needs
* to be executed to produce the value . ( This is done so that we can have
* lazy evaluation of InitPlans : they aren ' t executed until / unless a
* result value is needed . ) Otherwise the value is assumed to be valid
* when needed .
* - - - - - - - - - - - - - - - -
*/
typedef struct ParamExecData
{
void *execPlan; /* should be "SubPlanState *" */
Datum value;
bool isnull;
} ParamExecData;
/* type of argument for ParamsErrorCallback */
typedef struct ParamsErrorCbData
{
const char *portalName;
ParamListInfo params;
} ParamsErrorCbData;
/* Functions found in src/backend/nodes/params.c */
extern ParamListInfo makeParamList(int numParams);
extern ParamListInfo copyParamList(ParamListInfo from);
extern Size EstimateParamListSpace(ParamListInfo paramLI);
extern void SerializeParamList(ParamListInfo paramLI, char **start_address);
extern ParamListInfo RestoreParamList(char **start_address);
extern char *BuildParamLogString(ParamListInfo params, char **knownTextValues,
int maxlen);
extern void ParamsErrorCallback(void *arg);
#endif /* PARAMS_H */
Messung V0.5 in Prozent C=79 H=98 G=88
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.7Bemerkung:
(vorverarbeitet am 2026-08-08)
¤
*Bot Zugriff
2026-08-25
Neuigkeiten
Aktuelles
Motto des Tages
Open Source Software
Jenseits des Üblichen ....
Besucherstatistik
Statistik
#Sources=141584
#Domains=752002