一级a做爰片在线看网站厦门网站排名优化费用
ParamListInfoData是参数的统一抽象,例如
- 在pl中执行
raise notice '%', n;n的值会拼成select n到SQL层取值,但值在哪呢,还是在pl层。对sql层来说,n的一种可能性是参数,在这种可能性中,n的数据放在ParamListInfoData结构中。执行时,走表达式框架,从ExecEvalParamExtern函数中取值。 - 在sql中执行prepare时也会用占位符替代具体的值,在execute时,具体的值放在
ParamListInfoData中,在执行时从该数据结构中取值执行。 
以pl为例,分析ParamListInfoData变量含义:
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;typedef struct ParamExecData
{void	   *execPlan;		/* should be "SubPlanState *" */Datum		value;bool		isnull;
} ParamExecData;
 
其中:
- paramFetch:指向plpgsql_param_fetch函数,动态取值用。
 - paramFetchArg:指向pl的estate,拿到任何所需的pl的运行状态。
 - paramCompile:配置取值函数。
 - paramCompileArg:pl不需要,为空。
 - parserSetup:配置上述钩子函数。
 - parserSetupArg:pl不需要,为空。
 - numParams:和estate->ndatums相同。
 - params:结构体后置数组,每个数组元素对应一个datum包含 
- value:数据值或指针。
 - isnull:为空?
 - pflags:状态位。
 - ptype:值的类型。
 
 
值放在后置数组中,在exec_eval_using_params函数中赋值。
