Redrock Postgres 搜索 英文
版本: 14 / 15 / 16 / 17

SPI_execute_extended

SPI_execute_extended — 执行使用外部参数的命令

语法

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

描述

SPI_execute_extended 执行可能包括对外部提供的参数的引用的命令。命令文本将参数称为 $noptions->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 语句的非原子执行(但除非 SPI_OPT_NONATOMIC 标志已传递给 SPI_connect_ext,否则忽略此字段)

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 对象必须计算它。