PostgreSQL 9.4.4 中文手册 | |||
---|---|---|---|
上一页 | 上一级 | 章 31. libpq - C 库 | 下一页 |
PostgreSQL提供一个向服务器发送简单的函数调用的捷径接口。
提示: 这个接口在某种程度上已经废弃了,因为我们可以通过设置一个预备语句来定义函数调用, 从而达到类似的性能和更强大的功能。然后,用二进制参数和结果传输执行该语句,替换一次捷径函数调用。
函数PQfn
请求允许通过捷径接口执行服务器函数。
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里面的指定字节数的数据将不做任何处理发送出去; 这些数据必须是服务器预期的该函数参数类型的二进制传输格式。 (类型为int *的u.ptr的声明是过去式了;最好认为它是void *。) result_buf指向放置该函数的返回值的缓冲区。 调用者必须为返回值分配足够的空间(这里没有检查!)。 实际的返回值长度(以字节计)将被放在result_len指向的整数里返回。 如果预期返回值是 2 或 4 字节整数,把result_is_int设为 1;否则设为 0。 把result_is_int设为 1 告诉libpq必要时交换数值字节序, 这样就可以正确地传输成客户机上的int值;请注意,为了每种允许的结果尺寸, 传递4字节整数到*result_buf。当result_is_int是 0 时, 服务器发送回来的字节串不做修改直接返回。(在这种情况下, 最好认为result_buf是类型void *。)
PQfn
总是返回一个有效的PGresult指针。
在使用结果之前应该检查结果状态。当结果不再使用后,调用者有义务使用
PQclear
释放PGresult。
请注意我们没办法处理空值的参数,空的结果,也没办法在使用这个接口的时候设置有值的结果。