SPI_execute_plan_extended#

SPI_execute_plan_extended

SPI_execute_plan_extended

SPI_execute_plan_extended — выполнить оператор, подготовленный с помощью SPI_prepare

Синтаксис

int SPI_execute_plan_extended(SPIPlanPtr plan,
                              const SPIExecuteOptions * options)

Описание

SPI_execute_plan_extended выполняет оператор, подготовленный с помощью функции SPI_prepare или одного из ее аналогов. Эта функция эквивалентна функции SPI_execute_plan, за исключением того, что информация о значениях параметров, которые будут переданы в запрос, представлена иначе, и могут быть переданы дополнительные параметры для управления выполнением.

Все значения параметров запроса представлены структурой ParamListInfo, что удобно для передачи значений, которые уже доступны в этом формате. Также можно использовать динамические наборы параметров с помощью функций-перехватчиков, указанных в ParamListInfo.

Также, вместо того чтобы всегда накапливать кортежи результата в структуре SPI_tuptable, кортежи могут быть переданы в объект DestReceiver, предоставленный вызывающей стороной, по мере их генерации исполнителем. Это особенно полезно для запросов, которые могут генерировать много кортежей, поскольку данные могут быть обработаны непосредственно в процессе, а не накапливаться в памяти.

Аргументы

SPIPlanPtr plan

подготовленный оператор (возвращаемое функцией SPI_prepare)

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_plan

ResourceOwner owner

Владелец ресурса, который будет удерживать счетчик ссылок на план во время его выполнения. Если NULL, используется CurrentResourceOwner. Игнорируется для несохраненных планов, так как SPI не устанавливает счетчики ссылок на них.

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

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

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