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 неактивен