SPI_execute_extended#

SPI_execute_extended

SPI_execute_extended

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

Синтаксис

int SPI_execute_extended(const char *command,
                         const SPIExecuteOptions * options)

Описание

SPI_execute_extended выполняет команду, которая может содержать ссылки на внешне предоставленные параметры. Текст команды обращается к параметру как $n, и объект options->params (если предоставлен) предоставляет значения и информацию о типе для каждого такого символа. Различные параметры выполнения можно указать в структуре options также.

Объект options->params обычно должен помечать каждый параметр флагом PARAM_FLAG_CONST, так как для запроса всегда используется одноразовый план.

Если options->dest не равен NULL, то результаты кортежей передаются этому объекту по мере их генерации исполнителем, а не накапливаются в SPI_tuptable. Использование предоставленного вызывающим объекта DestReceiver особенно полезно для запросов, которые могут генерировать много кортежей, так как данные могут обрабатываться непосредственно во время выполнения, а не накапливаться в памяти.

Аргументы

const char * command

строка команды

const SPIExecuteOptions * options

структура, содержащая необязательные аргументы

Всегда обнуляйте всю структуру options перед заполнением нужных полей. Это гарантирует совместимость кода в будущем, так как любые добавленные поля в структуру будут заданы таким образом, чтобы сохранять обратную совместимость, если они равны нулю. В настоящее время доступны следующие поля options:

ParamListInfo params

структура данных, содержащая типы и значения параметров запроса; NULL, если нет

bool read_only

true для выполнения только для чтения

bool allow_nonatomic

Сохраняется возможность неатомарного выполнения операторов CALL и DO при использовании значения true.

bool must_return_tuples

если true, вызвать ошибку, если запрос не является запросом, который возвращает кортежи (это не запрещает случай, когда он случайно возвращает ноль кортежей)

uint64 tcount

максимальное количество строк для возврата, или 0 для отсутствия ограничений

DestReceiver * dest

DestReceiver объект, который будет получать все кортежи, выделяемые запросом; если NULL, то результаты кортежей накапливаются в структуре SPI_tuptable, как в функции SPI_execute

ResourceOwner owner

Это поле присутствует для согласованности с SPI_execute_plan_extended, но оно игнорируется, поскольку план, используемый SPI_execute_extended, никогда не сохраняется.

Возвращаемое значение

Возвращаемое значение такое же, как и для SPI_execute.

Когда options->dest равно NULL, SPI_processed и SPI_tuptable устанавливаются так же, как и в SPI_execute. Когда options->dest не равно NULL, SPI_processed устанавливается в ноль, а SPI_tuptable устанавливается в NULL. Если требуется подсчет кортежей, объект DestReceiver вызывающего должен его вычислить.