SPI_execute_plan_extended — 执行由 SPI_prepare 准备的语句
int SPI_execute_plan_extended(SPIPlanPtrplan, const SPIExecuteOptions *options)
SPI_execute_plan_extended 执行由 SPI_prepare 或其同级函数之一准备的语句。此函数等效于 SPI_execute_plan,不同之处在于,传递给查询的参数值的信息以不同的方式呈现,并且可以传递额外的执行控制选项。
查询参数值由 ParamListInfo 结构表示,这对于传递已以该格式提供的值非常方便。也可以通过 ParamListInfo 中指定的钩子函数来使用动态参数集。
此外,元组可以传递给调用者提供的 DestReceiver 对象,而不是总是将结果元组累积到 SPI_tuptable 结构中,因为它们是由执行器生成的。 这对于可能生成许多元组的查询特别有用,因为数据可以即时处理,而不是累积在内存中。
SPIPlanPtr plan预处理语句(由 SPI_prepare 返回)
const SPIExecuteOptions * options包含可选参数的结构
调用者应始终将整个 options 结构清零,然后填写他们想要设置的任何字段。 这确保了代码的向前兼容性,因为将来添加到该结构中的任何字段都将被定义为在为零时向后兼容地运行。 目前可用的 options 字段是
ParamListInfo params包含查询参数类型和值的数据结构;如果没有,则为 NULL
bool read_only只读执行为 true
bool allow_nonatomictrue 允许非原子执行 CALL 和 DO 语句(但是,除非将 SPI_OPT_NONATOMIC 标志传递给 SPI_connect_ext,否则将忽略此字段)
bool must_return_tuples如果为 true,则如果查询不是返回元组的类型,则会引发错误(这并不禁止它恰好返回零个元组的情况)
uint64 tcount要返回的最大行数,如果无限制,则为 0
DestReceiver * dest将接收查询发出的任何元组的 DestReceiver 对象;如果为 NULL,则结果元组将像在 SPI_execute_plan 中一样累积到 SPI_tuptable 结构中
ResourceOwner owner在执行计划时将持有该计划的引用计数的资源所有者。如果为 NULL,则使用 CurrentResourceOwner。对于非保存的计划将被忽略,因为 SPI 不会获取它们的引用计数。
返回值与 SPI_execute_plan 的返回值相同。
当 options->dest 为 NULL 时,将像在 SPI_execute_plan 中一样设置 SPI_processed 和 SPI_tuptable。当 options->dest 不为 NULL 时,SPI_processed 将设置为零,而 SPI_tuptable 将设置为 NULL。如果需要元组计数,则调用者的 DestReceiver 对象必须计算它。
如果您在文档中发现任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用此表单报告文档问题。