SPI_execute_extended — executa um comando com parâmetros fora de linha
int SPI_execute_extended(const char *command, const SPIExecuteOptions *options)
A função SPI_execute_extended executa um comando
que pode incluir referências a parâmetros fornecidos externamente.
O texto do comando refere-se ao parâmetro como
$,
e o objeto noptions->params (se fornecido)
fornece valores e informações de tipo de dados para cada símbolo.
Também podem ser especificadas várias opções de execução na estrutura
options.
O objeto options->params normalmente deve
marcar cada parâmetro com o sinalizador PARAM_FLAG_CONST,
já que é sempre usado um plano de uma única vez para a consulta.
Se options->dest não for NULL,
então as tuplas resultantes são passadas para este objeto à medida
que são geradas pelo executor, em vez de serem acumuladas em
SPI_tuptable.
Usar um objeto DestReceiver fornecido pelo chamador
é 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.
const char * commandcadeia de caracteres de comando
const SPIExecuteOptions * optionsestrutura contendo argumentos opcionais
Os chamadores sempre devem zerar toda a estrutura
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 opções atualmente disponíveis são:
ParamListInfo params
estrutura de dados contendo tipos de dados e valores de
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 é 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
o objeto DestReceiver que irá receber quaisquer
tuplas produzidas pela consulta; se NULL, as
tuplas de resultados serão acumuladas em uma estrutura
SPI_tuptable, como em
SPI_execute
ResourceOwner owner
este campo está presente para consistência com
SPI_execute_plan_extended, mas é ignorado,
porque o plano usado por SPI_execute_extended
nunca é salvo.
O valor retornado é o mesmo que para a função
SPI_execute.
Quando options->dest é NULL,
SPI_processed e SPI_tuptable
são definidos como em SPI_execute.
Quando options->dest não é
NULL, SPI_processed é definido
como zero, e SPI_tuptable é definido como
NULL.
Se houver necessidade uma contagem de tuplas, o objeto
DestReceiver do chamador deverá calculá-la.