PostgreSQLCung cấp tỷ lệ kèo bóng đá để gửi các cuộc gọi chức năng đơn giản đến máy chủ.
Giao tỷ lệ kèo bóng đá này có phần lỗi thời, vì người ta có thể đạt được hiệu suất tương tự và chức năng lớn hơn bằng cách thiết lập một câu lệnh đã chuẩn bị để xác định cuộc gọi chức năng. Sau đó, thực hiện câu lệnh bằng truyền nhị phân của các tham số và kết quả thay thế cho một cuộc gọi hàm đường nhanh.
hàmPQFN
Yêu cầu thực hiện chức năng máy chủ thông qua tỷ lệ kèo bóng đá dẫn nhanh:
pgresult *pqfn (pgconn *Conn, int fnid, int *result_buf, int *result_len, int result_is_int, const pqargblock *args, int nargs); Cấu trúc typedef int len; int isint; Liên minh int *ptr; Int Integer; u; Pqargblock;
Thefnid
Đối số là oid của hàm được thực thi.args
vàNARGS
Xác định các tham số sẽ được truyền đến hàm; Họ phải khớp với danh sách đối số chức năng được khai báo. Khiisint
Trường của cấu trúc tham số là đúng,U.Integer
Giá trị được gửi đến máy chủ dưới dạng số nguyên của độ dài được chỉ định (đây phải là 2 hoặc 4 byte); Hoán đổi byte thích hợp xảy ra. Khiisint
là sai, số byte được chỉ định tại*U.Ptr
được gửi không có xử lý; Dữ tỷ lệ kèo bóng đá phải ở định dạng mà máy chủ dự kiến để truyền nhị phân của kiểu dữ tỷ lệ kèo bóng đá đối số của hàm. (Tuyên bố củaU.PTR
là loạiint *
là lịch sử; Sẽ tốt hơn nếu xem xét nóvoid *
.)result_buf
chỉ vào bộ đệm để đặt giá trị trả về của hàm. Người gọi phải phân bổ đủ không gian để lưu trữ giá trị trả về. (Không có kiểm tra!) Độ dài kết quả thực tế trong byte sẽ được trả về trong số nguyên được trỏ bởiresult_len
. Nếu dự kiến kết quả số nguyên 2 hoặc 4 byte, hãy đặtresult_is_int
thành 1, nếu không sẽ đặt nó thành 0. Cài đặtresult_is_int
đến 1 Nguyên nhânlibpqĐể hoán đổi giá trị nếu cần thiết, để nó được phân phối dưới dạng thích hợpint
Giá trị cho máy khách; Lưu ý rằng một số nguyên 4 byte được chuyển vào*result_buf
Đối với kích thước kết quả được phép. Khiresult_is_int
là 0, chuỗi byte định dạng nhị phân được gửi bởi máy chủ được trả về không sửa đổi. (Trong trường hợp này tốt hơn là nên xem xétresult_buf
là loạivoid *
.)
PQFN
Luôn trả về hợp lệpgresult
Con trỏ, có trạng tháiPGRES_COMMAND_OK
Để thành công hoặcPGRES_FATAL_ERROR
Nếu gặp một số vấn đề. Trạng thái kết quả nên được kiểm tra trước khi kết quả được sử dụng. Người gọi chịu trách nhiệm giải phóngpgresult
vớiPQClear
Khi nó không còn cần thiết nữa.
Để chuyển đối số null cho hàm, đặtlen
Trường của cấu trúc tham số đó thành-1
; Theisint
vàu
Các trường sau đó không liên quan. (Nhưng điều này chỉ hoạt động trong các kết nối tỷ lệ kèo bóng đá thức 3.0 trở lên.)
Nếu hàm trả về null,*result_len
được đặt thành-1
và*result_buf
không được sửa đổi. (Điều này chỉ hoạt động trong tỷ lệ kèo bóng đá thức 3.0 và các kết nối sau; trong tỷ lệ kèo bóng đá thức 2.0, không*result_len
cũng không*result_buf
được sửa đổi.)
Lưu ý rằng không thể xử lý các kết quả có giá trị được đặt khi sử dụng giao tỷ lệ kèo bóng đá này. Ngoài ra, hàm phải là hàm đơn giản, không phải là hàm tổng hợp hoặc cửa sổ.