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
对象特别有帮助,对于可能产生多个元组的查询,因为数据可以在过程中处理而不是积累在内存里。
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_processed
和 SPI_tuptable
设置为在SPI_execute
中。
当options->dest
不为NULL时,SPI_processed
被设置为零,并且SPI_tuptable
被设置为NULL。
如果需要元组计数,调度器的DestReceiver
对象必须计算它。