SPI_execute_extended
SPI_execute_extended — выполнить команду с выделенными параметрами
Синтаксис
int SPI_execute_extended(const char *command, const SPIExecuteOptions *options)
Описание
SPI_execute_extended выполняет команду, которая может включать ссылки на параметры, передаваемые извне. В тексте команды параметры обозначаются символами $; тип и значение каждого такого параметра предоставляются в объекте noptions->params (если он передаётся). В options также могут передаваться различные параметры выполнения.
Как правило, в объекте options->params все параметры должны иметь пометку PARAM_FLAG_CONST, поскольку для запроса всегда используется одноразовый план.
Если значение options->dest не NULL, то результирующие кортежи передаются в этот объект по мере их формирования исполнителем, а не накапливаются в SPI_tuptable. Подготовить и использовать объект DestReceiver особенно полезно для запросов, при выполнении которых можно получить множество кортежей, так как этот объект позволяет обрабатывать данные «на лету», не дожидаясь их накопления в памяти.
Аргументы
const char *commandстрока команды
const SPIExecuteOptions *optionsструктура, содержащая необязательные аргументы
Структуру options всегда следует сначала полностью заполнять нулями, а затем уже задавать необходимые значения. Это гарантирует совместимость с будущими изменениями в коде: при добавлении в эту структуру любых новых полей нулевое значение будет определять старое поведение. Сейчас в options есть такие поля:
ParamListInfoparamsструктура данных, содержащая типы и значения параметров запроса; NULL, если их нет
boolread_onlytrueдля режима выполнения «только чтение»boolallow_nonatomictrueдля неатомарного выполнения операторов CALL и DO (но это поле игнорируется, если функцииSPI_connect_extне был передан флагSPI_OPT_NONATOMIC)boolmust_return_tuplesесли
true, вызывает ошибку для типов запросов, не возвращающих кортежи (за исключением случая, когда возвращаются нулевые кортежи)uint64tcountмаксимальное число строк, которое должно быть возвращено; с
0ограничения нетDestReceiver *destобъект
DestReceiver, получающий все кортежи, которые выдаёт запрос; если NULL, результирующие кортежи накапливаются вSPI_tuptable, как при выполненииSPI_executeResourceOwnerownerЭто поле присутствует для согласованности с
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.