SPI_modifytuple — 通过替换给定行中被选中的字段创建一行
HeapTuple SPI_modifytuple(Relationrel, HeapTuplerow, intncols, int *colnum, Datum *values, const char *nulls)
SPI_modifytuple 通过为被选中的列替换
新值来创建一个新行,并在其他位置复制原始行的列。
输入行不会被修改。
新行在上层执行器上下文中返回。
这个函数只能在连接到 SPI 期间使用。
否则它返回 NULL 并把
SPI_result 设为
SPI_ERROR_UNCONNECTED。
Relation rel只被用作该行的行描述符的来源。 (传一个关系而非行描述符是一个设计缺陷。)
HeapTuple row要修改的行
int ncols要更改的列的数量
int * colnum
一个长度为
ncols 的数组,包含要被更改的列的
编号(列号从 1 开始)
Datum * values
一个长度为
ncols 的数组,包含指定列的
新值
const char * nulls
一个长度为
ncols 的数组,描述哪些新值是
空的
如果
nulls 为
NULL,则
SPI_modifytuple 假定没有新值是
空的。
否则,
nulls
数组的每个条目在相应新值非空时应为
' ',在相应新值为空时应为
'n'。
(在后一种情况下,相应
values 条目中的实际值无关紧要。)
注意,
nulls 不是一个文本字符串,只是一个
数组:它不需要
'\0' 终止符。
带有修改的新行,分配在上层执行器
上下文中,出错时为
NULL
(错误指示见
SPI_result)
出错时,
SPI_result 被设置如下:
SPI_ERROR_ARGUMENT
如果
rel 为
NULL,或
row 为
NULL,或
ncols
小于等于 0,或
colnum 为
NULL,或
values 为
NULL。
SPI_ERROR_NOATTRIBUTE
如果
colnum 包含一个无效的列号
(小于等于 0 或大于
row 中的列数)
SPI_ERROR_UNCONNECTED如果 SPI 未处于活动状态