SPI_execute_with_args#

SPI_execute_with_args

SPI_execute_with_args

SPI_execute_with_args — выполнить команду с параметрами вне строки

Синтаксис

int SPI_execute_with_args(const char *command,
                          int nargs, Oid *argtypes,
                          Datum *values, const char *nulls,
                          bool read_only, long count)

Описание

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

Если параметр 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, в случае успешного выполнения.