SPI_execute_with_args
SPI_execute_with_args — выполнить команду с выделенными параметрами
Синтаксис
int SPI_execute_with_args(const char *command
, intnargs
, Oid *argtypes
, Datum *values
, const char *nulls
, boolread_only
, longcount
)
Описание
SPI_execute_with_args
выполняет команду, которая может включать ссылки на параметры, передаваемые извне. В тексте команды параметры обозначаются символами $
, а в вызове указываются типы данных и значения для каждого такого символа. Параметры n
read_only
и count
имеют тот же смысл, что и в SPI_execute
.
Основное преимущество этой функции по сравнению с SPI_execute
в том, что она позволяет передавать в команду значения данных, не требуя кропотливой подготовки строк, и таким образом сокращает риск атак с SQL-инъекцией.
Подобного результата можно достичь, вызвав SPI_prepare
и затем SPI_execute_plan
; однако с данной функцией план запроса всегда подстраивается под переданные конкретные значения параметров. Поэтому для разового выполнения запроса рекомендуется применять эту функцию. Если же одна и та же команда должна выполняться с самыми разными параметрами, какой вариант окажется быстрее, будет зависеть от стоимости повторного планирования и выигрыша от выбора специализированных планов.
Аргументы
const char *
command
строка команды
int
nargs
число входных параметров (
$1
,$2
и т. д.)Oid *
argtypes
массив размера
nargs
, содержащий OID типов параметровDatum *
values
массив размера
nargs
, содержащий фактические значения параметровconst char *
nulls
массив размера
nargs
, описывающий, в каких параметрах передаётся NULLЕсли в
nulls
передаётсяNULL
,SPI_execute_with_args
считает, что ни один из параметров не равен NULL. В противном случае элемент массиваnulls
должен содержать' '
, если значение соответствующего параметра не NULL, либо'n'
, если это значение — NULL. (В последнем случае значение, переданное в соответствующем элементеvalues
, не учитывается.) Заметьте, чтоnulls
— это не текстовая строка, а просто массив: ноль ('\0'
) в конце не нужен.bool
read_only
true
для режима выполнения «только чтение»long
count
максимальное число строк, которое должно быть возвращено; с
0
ограничения нет
Возвращаемое значение
Возвращаемые значения те же, что и у SPI_execute
.
Переменные SPI_processed
и SPI_tuptable
устанавливаются как в SPI_execute
, если вызов был успешным.