SPI_execute_plan_extended — выполнить оператор, подготовленный функцией SPI_prepare
int SPI_execute_plan_extended(SPIPlanPtrplan, const SPIExecuteOptions *options)
SPI_execute_plan_extended выполняет оператор,
подготовленный функцией SPI_prepare или одной из родственных ей функций.
Данная функция эквивалентна SPI_execute_plan, за исключением того, что информация о значениях параметров, передаваемых запросу, представляется иначе, и могут быть переданы дополнительные параметры управления выполнением.
Значения параметров запроса представляются
структурой ParamListInfo struct, что удобно для передачи значений, уже доступных в этом формате. Также могут использоваться динамические наборы
параметров через функции-перехватчики, указанные
в ParamListInfo.
Кроме того, вместо постоянного накопления результирующих кортежей в
SPI_tuptable структуре, кортежи могут передаваться предоставленному вызывающей стороной объекту DestReceiver object по мере их генерации исполнителем. Это особенно полезно для запросов, которые могут возвращать много кортежей, так как данные могут обрабатываться «на лету», а не накапливаться в памяти.
SPIPlanPtr plan
подготовленное выражение (возвращаемое SPI_prepare)
const SPIExecuteOptions * optionsструктура, содержащая необязательные аргументы
Вызывающие функции должны всегда полностью обнулять options
структуру, а затем заполнять те поля, которые необходимо установить. Это обеспечивает прямую совместимость кода, так как любые поля, которые будут добавлены в структуру в будущем, будут вести себя обратно совместимым образом, если они равны нулю. Текущие доступные options поля:
ParamListInfo paramsструктура данных, содержащая типы и значения параметров запроса; NULL, если они отсутствуют
bool read_onlytrue для выполнения в режиме «только чтение»
bool allow_nonatomic
true позволяет выполнять операторы CALL и DO неатомарно (но это поле игнорируется, если только SPI_OPT_NONATOMIC флаг
в SPI_connect_ext)
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 объект должен
его вычислить.