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 выполняет команду, которая может включать ссылки на параметры, передаваемые извне. В тексте команды параметры обозначаются символами $, а в вызове указываются типы данных и значения для каждого такого символа. Параметры nread_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, если вызов был успешным.