SPI_modifytuple
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
, описывающий, в каких столбцах передаётся NULLЕсли в
nulls
передаётсяNULL
,SPI_modifytuple
считает, что ни один из параметров не равен NULL. В противном случае элемент массиваnulls
должен содержать' '
, если значение соответствующего параметра не NULL, либо'n'
, если это значение — NULL. (В последнем случае значение, переданное в соответствующем элементе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 неактивен