网站防御怎么做,网站seo收录工具,软件开发交付流程,微盟商户助手app下载ParamListInfoData是参数的统一抽象#xff0c;例如
在pl中执行raise notice %, n;n的值会拼成select n到SQL层取值#xff0c;但值在哪呢#xff0c;还是在pl层。对sql层来说#xff0c;n的一种可能性是参数#xff0c;在这种可能性中#xff0c;n的数据放在ParamListI…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配置取值函数。paramCompileArgpl不需要为空。parserSetup配置上述钩子函数。parserSetupArgpl不需要为空。numParams和estate-ndatums相同。params结构体后置数组每个数组元素对应一个datum包含 value数据值或指针。isnull为空pflags状态位。ptype值的类型。
值放在后置数组中在exec_eval_using_params函数中赋值。