# SPI_执行_计划_扩展的

SPI_执行_计划_扩展 — 执行由SPI_prepare

# 概要

int SPI_execute_plan_extended(SPIPlanPtr plan,
                              const SPIExecuteOptions * options)

# 描述

SPI_execute_plan_extended执行由SPI_prepare或其兄弟姐妹之一。这个函数相当于SPI_execute_plan,除了有关要传递给查询的参数值的信息以不同的方式呈现,并且可以传递其他执行控制选项。

查询参数值由 a 表示参数列表信息struct,它便于传递该格式中已经可用的值。动态参数集也可以通过指定的钩子函数使用参数列表信息.

此外,不是总是将结果元组累积到一个SPI_tuptable结构,元组可以传递给调用者提供的目标接收器对象,因为它们是由 executor 生成的。这对于可能生成许多元组的查询特别有用,因为数据可以即时处理,而不是在内存中累积。

# 论据

SPIPlanPtr *计划*

准备好的语句(由SPI_prepare)

常量 SPIExecuteOptions * *选项*

包含可选参数的结构

来电者应始终将整个内容归零*选项struct,然后填写他们想要设置的任何字段。这确保了代码的前向兼容性,因为将来添加到结构中的任何字段都将被定义为向后兼容,如果它们为零。目前可用的选项*字段是:

参数列表信息 *参数*

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

布尔 *只读*

真的用于只读执行

布尔 *允许非原子*

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

布尔 *must_return_tuples*

如果真的,如果查询不是返回元组的类型,则引发错误(这并不禁止它碰巧返回零元组的情况)

uint64 *tcount*

要返回的最大行数,或0无限制

目标接收器 * *目的地*

目标接收器将接收查询发出的任何元组的对象;如果为 NULL,结果元组被累积到一个SPI_tuptable结构,如SPI_execute_plan

资源所有者 *所有者*

在执行时将持有计划引用计数的资源所有者。如果为 NULL,则使用 CurrentResourceOwner。对于未保存的计划被忽略,因为 SPI 不会获取这些计划的引用计数。

# 返回值

返回值与for相同SPI_execute_plan.

什么时候*选项->目标一片空白,SPI_processedSPI_tuptable设置为SPI_execute_plan.什么时候选项->目标*不为空,SPI_processed设置为零并且SPI_tuptable设置为 NULL。如果需要元组计数,调用者的目标接收器对象必须计算它。