SPI_execute_plan_extended#
SPI_execute_plan_extended
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
, что удобно для передачи значений, которые уже доступны в этом формате. Также можно использовать динамические наборы параметров с помощью функций-перехватчиков, указанных в ParamListInfo
.
Также, вместо того чтобы всегда накапливать кортежи результата в структуре SPI_tuptable
, кортежи могут быть переданы в объект DestReceiver
, предоставленный вызывающей стороной, по мере их генерации исполнителем. Это особенно полезно для запросов, которые могут генерировать много кортежей, поскольку данные могут быть обработаны непосредственно в процессе, а не накапливаться в памяти.
Аргументы
SPIPlanPtr
plan
подготовленный оператор (возвращаемое функцией
SPI_prepare
)const SPIExecuteOptions *
options
структура, содержащая необязательные аргументы
Всегда обнуляйте всю структуру options
перед заполнением нужных полей. Это гарантирует совместимость кода в будущем, так как любые добавленные поля в структуру будут заданы таким образом, чтобы сохранять обратную совместимость, если они равны нулю. В настоящее время доступны следующие поля options
:
ParamListInfo
params
структура данных, содержащая типы и значения параметров запроса; NULL, если нет
bool
read_only
true
для выполнения только для чтения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
вызывающего должен его вычислить.