?
This document uses PHP Chinese website manual Release
PostgreSQL提供一個(gè)發(fā)往服務(wù)器的函數(shù)調(diào)用的捷徑接口。
Tip: 提示: 這個(gè)接口在某種程度上已經(jīng)廢棄了,因?yàn)槲覀兛梢酝ㄟ^(guò)設(shè)置一蓋準(zhǔn)備好的 語(yǔ)句來(lái)定義函數(shù)調(diào)用,從而達(dá)到類似的性能和更強(qiáng)大的功能。然后,用二進(jìn)制參 數(shù)和結(jié)果傳輸執(zhí)行該語(yǔ)句,替換一次捷徑函數(shù)調(diào)用。
函數(shù)PQfn
請(qǐng)求允許通過(guò)捷徑接口執(zhí)行服務(wù)器函數(shù)。
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參數(shù)是待執(zhí)行的函數(shù)的對(duì)象標(biāo)識(shí)(OID)。args和nargs定義了要傳遞給函數(shù)的參數(shù); 它們必須匹配已經(jīng)聲明了的函數(shù)參數(shù)列表。如果某個(gè)參數(shù)結(jié)構(gòu)的isint字段是真 ,那么u.integer值以指定長(zhǎng)度(必須是1,2,或者 4 字節(jié)) 的整數(shù)發(fā)送給服務(wù)器; 這時(shí)候會(huì)進(jìn)行恰當(dāng)?shù)淖止?jié)序交換(byte-swapping)。如果isint為假, 那么在*u.ptr里面的指定字節(jié)數(shù)的數(shù)據(jù)將不做任何處理發(fā)送出去; 這些數(shù)據(jù)必須是服務(wù)器 預(yù)期的該函數(shù)參數(shù)類型的二進(jìn)制傳輸格式。result_buf是放置返回值的緩沖區(qū)。 調(diào)用者必須為返回值分配足夠的空間(這里沒(méi)有檢查?。?shí)際的返回值長(zhǎng)度將被放在result_len指向的整數(shù)里返回。 如果預(yù)期返回值是 1,2 或 4 字節(jié)整數(shù),把result_is_int設(shè)為 1; 否則設(shè)為 0。 把result_is_int設(shè)為 1 告訴libpq必要時(shí)交換數(shù)值字節(jié)序,這樣就可以正確地傳 輸成客戶機(jī)上的整數(shù)值。當(dāng)result_is_int是 0 時(shí), 服務(wù)器發(fā)送回來(lái)的字節(jié)串不做修改直接返回。
PQfn
總是返回一個(gè)有效的PGresult指針。在使用結(jié)果之前應(yīng)該檢查結(jié)果狀態(tài)。
當(dāng)結(jié)果不再使用后,調(diào)用者有義務(wù)使用PQclear
釋放PGresult。
請(qǐng)注意我們沒(méi)辦法處理空值的參數(shù),空的結(jié)果,也沒(méi)辦法在使用這個(gè)接口的時(shí)候設(shè)置有值的結(jié)果。