SPI_modifytuple#
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
, описывающий, какие новые значения являются нулевымиЕсли параметр
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 не активен