SPI_modifytuple — 通过替换给定行的选定字段来创建行
HeapTuple SPI_modifytuple(Relationrel
, HeapTuplerow
, intncols
, int *colnum
, Datum *values
, const char *nulls
)
SPI_modifytuple
通过为选定列代入新值来创建新行,复制其他位置的原始行的列。输入行不会被修改。新行会在上层执行器上下文中返回。
仅在连接到 SPI 时才能使用此函数。否则,它会返回 NULL,并将 SPI_result
设置为 SPI_ERROR_UNCONNECTED
。
关系 rel
只用于作为行的行描述符的来源。(传递关系而不是行描述符是一个缺陷。)
堆元组 row
要修改的行
int ncols
要更改的列数
int * colnum
长度为 ncols
的数组,包含要更改的列的编号(列编号从 1 开始)
项目 * values
长度为 ncols
的数组,包含指定列的新值
const char * nulls
长度为 ncols
的数组,说明新值为 null 的内容
如果 nulls
为 NULL
,则 SPI_modifytuple
假设没有新值为 null。否则,如果相应的 New Value 非 null,则 nulls
数组的每个条目应为 ' '
;如果相应的 New Value 为 null,则应为 '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 未处于活动状态