SPI_execute_plan_extended — executa uma instrução preparada por SPI_prepare
int SPI_execute_plan_extended(SPIPlanPtrplan, const SPIExecuteOptions *options)
A função SPI_execute_plan_extended executa uma
instrução preparada por SPI_prepare ou uma de
suas irmãs.
Esta função é equivalente à função SPI_execute_plan,
exceto que as informações sobre os valores dos parâmetros a serem
passados para a consulta são apresentadas de forma diferente,
e podem ser passadas opções adicionais de controle de execução.
Os valores dos parâmetros da consulta são representados por uma
estrutura ParamListInfo, conveniente para
transmitir valores que já estão disponíveis neste formato.
Também podem ser usados conjuntos de parâmetros dinâmicos, por meio
de funções de gancho especificadas em ParamListInfo.
Além disso, em vez de sempre acumular as tuplas resultantes em uma
estrutura SPI_tuptable, as tuplas podem ser
passadas para um objeto DestReceiver fornecido
pelo chamador à medida que são geradas pelo executor.
Isto é particularmente útil para consultas que podem gerar muitas
tuplas, uma vez que os dados podem ser processados dinamicamente
em vez de serem acumulados na memória.
SPIPlanPtr plan
instrução preparada (retornada por SPI_prepare)
const SPIExecuteOptions * optionsestrutura contendo argumentos opcionais
Os chamadores devem sempre zerar toda a estrutura de
options e, em seguida, preencher os campos
que desejam definir.
Isto garante a compatibilidade futura do código, uma vez que quaisquer
campos adicionados à estrutura no futuro serão definidos para se
comportarem de maneira compatível com versões anteriores se forem zero.
Os campos de options disponíveis no momento são:
ParamListInfo params
estrutura de dados contendo tipos de dados e valores dos
parâmetros da consulta; NULL se nenhum
bool read_onlytrue para execução de leitura-apenas
bool allow_nonatomic
true permite a execução não atômica de
instruções CALL e DO
(mas este campo será ignorado a menos que tenha sido passado
o sinalizador SPI_OPT_NONATOMIC para
SPI_connect_ext)
bool must_return_tuples
Se for true, irá lançar um erro se a consulta
não for do tipo que retorna tuplas.
(Isto não impede o caso em que são retornadas zero tuplas.)
uint64 tcount
número máximo de linhas a serem retornadas,
ou 0 para sem limite
DestReceiver * dest
objeto DestReceiver que irá receber quaisquer
tuplas emitidas pela consulta; se NULL, as
tuplas de resultados são acumuladas em uma estrutura
SPI_tuptable, como em
SPI_execute_plan
ResourceOwner owner
O dono do recurso que irá manter a contagem de referência no
plano enquanto ele é executado.
Se NULL, será usado
CurrentResourceOwner.
Ignorado para planos não salvos, porque a SPI
não adquire contagens de referência sobre eles.
O valor retornado é o mesmo que para SPI_execute_plan.
Quando options->dest é NULL,
SPI_processed e
SPI_tuptable são definidos como em
SPI_execute_plan.
Quando options->dest não é NULL,
SPI_processed é definido como zero, e
SPI_tuptable é definido como NULL.
Se for requerida a contagem das tuplas, o objeto
DestReceiver do chamador deverá calculá-la.