支援的版本:目前 (17) / 16 / 15 / 14
開發版本:devel

SPI_execute_plan_extended

SPI_execute_plan_extended — 執行由 SPI_prepare 準備的語句

概要

int SPI_execute_plan_extended(SPIPlanPtr plan,
                              const SPIExecuteOptions * options)

說明

SPI_execute_plan_extended 執行由 SPI_prepare 或其同類函數準備的語句。此函數等效於 SPI_execute_plan,不同之處在於,傳遞給查詢的參數值資訊以不同的方式呈現,並且可以傳遞額外的執行控制選項。

查詢參數值由 ParamListInfo 結構表示,這便於傳遞已經以該格式提供的數值。也可以透過 ParamListInfo 中指定的 Hook 函數使用動態參數集。

此外,Tuple 不總是累積到 SPI_tuptable 結構中,而是可以在執行器產生 Tuple 時,將 Tuple 傳遞到呼叫者提供的 DestReceiver 物件。這對於可能產生許多 Tuple 的查詢特別有用,因為資料可以即時處理,而不是累積在記憶體中。

引數

SPIPlanPtr plan

準備好的語句(由 SPI_prepare 傳回)

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,如果查詢不是傳回 Tuple 的類型,則引發錯誤(這不會禁止它碰巧傳回零個 Tuple 的情況)

uint64 tcount

要傳回的最大列數,或者如果沒有限制則為 0

DestReceiver * dest

DestReceiver 物件,它將接收查詢發出的任何 Tuple;如果為 NULL,則結果 Tuple 將累積到 SPI_tuptable 結構中,如 SPI_execute_plan 中所示

ResourceOwner owner

資源擁有者,它將在執行計劃時保留計劃的參考計數。 如果為 NULL,則使用 CurrentResourceOwner。 對於非儲存的計劃會被忽略,因為 SPI 不會取得這些計劃的參考計數。

傳回值

傳回值與 SPI_execute_plan 相同。

options->dest 為 NULL 時,SPI_processedSPI_tuptable 的設定方式與 SPI_execute_plan 相同。 當 options->dest 不為 NULL 時,SPI_processed 設定為零,SPI_tuptable 設定為 NULL。 如果需要 Tuple 計數,則呼叫者的 DestReceiver 物件必須計算它。

提交更正

如果您在文件中看到任何不正確、與您使用特定功能的經驗不符或需要進一步說明的地方,請使用此表格來報告文件問題。