| PostgreSQL 7.4 文檔 | ||||
|---|---|---|---|---|
| Prev | Fast Backward | Chapter 27. libpq - C 庫 | Fast Forward | Next |
PostgreSQL 提供一個發往服務器的函數調用的捷徑接口。
提示: 這個接口在某種程度上已經廢棄了,因為我們可以通過設置一蓋準備好的語句來定義函數調用, 從而達到類似的性能和更強大的功能。然後,用二進制參數和結果傳輸執行該語句,替換一次捷徑函數調用。
PGresult* PQfn(PGconn* conn,
int fnid,
int *result_buf,
int *result_len,
int result_is_int,
const PQArgBlock *args,
int nargs);
typedef struct {
int len;
int isint;
union {
int *ptr;
int integer;
} u;
} PQArgBlock;fnid參數是待執行的函數的對象標識(OID)。 args 和 nargs 定義了要傳遞給函數的參數; 它們必須匹配已經聲明了的函數參數列表。 如果某個參數結構的 isint 字段是真,那麼 u.integer 值以指定長度(必須是1,2,或者 4 字節) 的整數發送給服務器;這時候會進行恰當的字節序交換(byte-swapping)。 如果 isint 為假,那麼在 *u.ptr 裡面的指定字節數的數據將不做任何處理發送出去; 這些數據必須是服務器預期的該函數參數類型的二進制傳輸格式。 result_buf是放置返回值的緩衝區。 調用者必須為返回值分配足夠的空間(這裡沒有檢查!)。 實際的返回值長度將被放在result_len指向的整數裡返回。 如果預期返回值是 1,2,或 4 字節整數,把result_is_int設為 1; 否則設為 0。把result_is_int設為 1 告訴 libpq必要時交換數值字節序,這樣就可以正確地傳輸成客戶機上的整數值。 當 result_is_int 是 0 時,服務器發送回來的字節串不做修改直接返回。
PQfn 總是返回一個有效的PGresult指針。 在使用結果之前應該檢查結果狀態。 當結果不再使用後,調用者有義務使用 PQclear 釋放PGresult。
請注意我們沒辦法處理空值的參數,空的結果,也沒辦法在使用這個接口的時候設置有值的結果。