当前位置: 首页 > news >正文

Postgresql中ParamListInfoData的作用

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函数中赋值。

http://www.lryc.cn/news/165598.html

相关文章:

  • 《计算机视觉中的多视图几何》笔记(1)
  • YOLO目标检测——火焰检测数据集+已标注xml和txt格式标签下载分享
  • tkinter四大按钮:Button,Checkbutton, Radiobutton, Menubutton
  • Sudowrite:基于人工智能的AI写作文章生成工具
  • 加密狗软件有什么作用?
  • 嵌入式Linux驱动开发(I2C专题)(二)
  • SMT贴片制造:发挥的作用和价值]
  • 蓝桥杯官网练习题(幸运数字)
  • pandas笔记:显示中间的省略号
  • 解决vagrant安装的centos7,在window主机重装系统过后,再次用vagrant启动centos7却无法启动
  • 嵌入式这个领域会变得过于内卷吗?
  • Linux下安装和使用MySQL的详细教程
  • 【Linux】多线程互斥与同步
  • 从零开始:云服务器构建网站的完全指南
  • idea中的debug界面上没有进入方法的红色按钮
  • JavaScript知识系列(4)每天10个小知识点
  • Xpath 访问 Svg 内部的元素
  • 无涯教程-JavaScript - DOLLARDE函数
  • C语言双向链表
  • 朋友圈大佬都去读研了,这份备考书单我码住了
  • JavaScript设计模式(五)——发布订阅模式、桥接模式、组合模式
  • prize_p1
  • Acwing 3534. 矩阵幂 3535. C翻转
  • Spring Cloud:构建微服务的最佳实践
  • 时间序列场景下多种数据填充算法实践与对比分析
  • Mysql开启binlog
  • 【Java Web】HTML 标签 总结
  • 前端面试的话术集锦第 4 篇:进阶篇下
  • mmap详解
  • 项目02—基于keepalived+mysqlrouter+gtid半同步复制的MySQL集群