SPI_execute_extended

SPI_execute_extended — 执行带线外参数的命令

大纲

int SPI_execute_extended(const char *command,
                         const SPIExecuteOptions * options)

描述

SPI_execute_extended执行一个可能包括关于外部支持参数的命令。 命令文本引用参数为$n,以及options->params对象(如果支持)提供值和类型信息,对于每个符号。 不同的执行选项也可以在options结构中指定。

options->params 对象将通常以PARAM_FLAG_CONST特征位标记每个参数,因为一个一次性计划总是用于查询。

如果options->dest为非NULL,则结果元组被传递到执行器产生的对象,而不是积累在SPI_tuptable里。 使用调用器支持的DestReceiver对象特别有帮助,对于可能产生多个元组的查询,因为数据可以在过程中处理而不是积累在内存里。

Arguments

const char * command

命令字符串

const SPIExecuteOptions * options

包含可选参数的结构体

调用器将总是将整个options结构体归零,然后填充他们想设置的任何字段。 这确保代码的向前兼容性,因为在未来添加到结构体中的任何字段将被定义成行为向后兼容,如果他们为零。 当前有效的options字段为:

ParamListInfo params

包含查询参数类型和值的数据结构;没有则为NULL

bool read_only

true 对于只读的执行

bool allow_nonatomic

true 允许CALL和DO语句的非原子执行。

bool must_return_tuples

如果为true,如果查询不是一种返回元组时抛出错误(这不禁止发生返回零元组的情况)

uint64 tcount

返回的最大行数,或者对于无限制为0

DestReceiver * dest

DestReceiver 对象将接收查询发出的任何元组;如果为NULL,结果元组积累到SPI_tuptable结构之中,就像在SPI_execute中一样。

ResourceOwner owner

这个字段表现和SPI_execute_plan_extended一致,但是它被忽略,因为被SPI_execute_extended使用的计划从来不保存。

返回值

返回值同SPI_execute一样。

options->dest为NULL时,SPI_processedSPI_tuptable设置为在SPI_execute中。 当options->dest不为NULL时,SPI_processed被设置为零,并且SPI_tuptable被设置为NULL。 如果需要元组计数,调度器的DestReceiver对象必须计算它。