Postgresql 8.4.22 Tài tỷ lệ kèo bóng đá tối nay | ||||
---|---|---|---|---|
prev | Backward nhanh | Chương 30.libpq- C Thư viện | Chuyển tiếp nhanh | Tiếp theo |
libpqhệ thống sự tỷ lệ kèo bóng đá tối nay là Được thiết kế để thông báo cho các trình xử lý sự tỷ lệ kèo bóng đá tối nay đã đăng ký về thú vịlibpqSự tỷ lệ kèo bóng đá tối nay, chẳng hạn như Sáng tạo hoặc phá hủyPGConnvàpgresultĐối tượng. Sử dụng chính trường hợp là điều này cho phép các ứng dụng liên kết dữ tỷ lệ kèo bóng đá tối nay của riêng họ Với APGConnhoặcpgresultvà đảm bảo rằng dữ tỷ lệ kèo bóng đá tối nay đó được giải phóng tại một thời gian thích hợp.
Mỗi trình xử lý sự tỷ lệ kèo bóng đá tối nay đã đăng ký được liên kết với hai phần của
Dữ liệu, được biết đếnlibpqChỉ như
mờ đụcvoid *Con trỏ. Có mộtVượt quaCon trỏ được cung cấp bởi
ứng dụng khi trình xử lý sự tỷ lệ kèo bóng đá tối nay được đăng ký vớiPGConn. Con trỏ qua tỷ lệ kèo bóng đá tối nay bao giờ
thay đổi cho cuộc sống củaPGConnvà tất cảpgresultS được tạo từ nó;
Vì vậy, nếu được sử dụng, nó phải trỏ đến dữ tỷ lệ kèo bóng đá tối nay tồn tại lâu. Ngoài ra
là mộtdữ tỷ lệ kèo bóng đá tối nay thể hiệnCon trỏ, trong đó
bắt đầu null trong mỗiPGConnvàpgresult. Con trỏ này có thể là
thao túng bằng cách sử dụngpqinstancedata
, pqsetInstanceata
, pqresultinstancedata
vàPQSetResultInstanceata
chức năng. Lưu ý rằng
Không giống như con trỏ qua, dữ tỷ lệ kèo bóng đá tối nay thể hiện của APGConntỷ lệ kèo bóng đá tối nay được kế thừa tự động bởipgresultS được tạo từ nó.libpqkhông biết những gì
các con trỏ dữ liệu thông qua và ví dụ trỏ đến (nếu bất cứ điều gì) và
sẽ không bao giờ cố gắng giải phóng họ - đó là trách nhiệm của
người xử lý sự tỷ lệ kèo bóng đá tối nay.
enumPGEVENTIDTên các loại của các sự tỷ lệ kèo bóng đá tối nay được xử lý bởi hệ thống sự tỷ lệ kèo bóng đá tối nay. Tất cả các giá trị của nó có Tên bắt đầu bằngPGEVT. Cho mỗi Loại sự tỷ lệ kèo bóng đá tối nay, có một cấu trúc thông tin sự tỷ lệ kèo bóng đá tối nay tương ứng Mang các tham số được truyền cho người xử lý sự tỷ lệ kèo bóng đá tối nay. Sự tỷ lệ kèo bóng đá tối nay Các loại là:
Sự tỷ lệ kèo bóng đá tối nay đăng ký xảy ra khipqregistereventProc
được gọi. Nó là
thời điểm lý tưởng để khởi tạo bất kỳInstancedataMột quy trình sự tỷ lệ kèo bóng đá tối nay có thể cần.
Chỉ có một sự tỷ lệ kèo bóng đá tối nay đăng ký sẽ được sa thải cho mỗi người xử lý sự tỷ lệ kèo bóng đá tối nay
trên mỗi kết nối. Nếu thủ tục sự tỷ lệ kèo bóng đá tối nay thất bại,
Đăng ký bị hủy bỏ.
Cấu trúc typedef Pgconn *Conn; PgEventRegister;
Khi APGEVT_REGISTERSự tỷ lệ kèo bóng đá tối nay
được nhận,evtinfoCon trỏ nên được đúc đến APGEVENTREGISTER *. Cấu trúc này
chứa mộtPGConnnên
ở trongConnection_oktrạng thái;
Đảm bảo nếu một người gọipqregistereventProc
Ngay sau đó
có được một tốtPGConn. Khi
Trả lại mã thất bại, tất cả phải dọn dẹp
Như tỷ lệ kèo bóng đá tối nayPGEVT_ConnDestroySự tỷ lệ kèo bóng đá tối nay
sẽ được gửi.
Sự tỷ lệ kèo bóng đá tối nay đặt lại kết nối được bắn khi hoàn thànhpqreset
hoặcpqresetpoll
. Trong cả hai trường hợp, sự tỷ lệ kèo bóng đá tối nay
chỉ bị sa thải nếu thiết lập lại thành công. Nếu sự tỷ lệ kèo bóng đá tối nay
Thủ tục thất bại, toàn bộ thiết lập lại kết nối sẽ thất bại;
ThePGConnđược đưa vàoConnection_Badstatus vàpqresetpoll
sẽ trả vềPGRES_POLLING_FAILED.
Cấu trúc typedef Pgconn *Conn; PgEventConnReset;
Khi APGEVT_CONNRESETSự tỷ lệ kèo bóng đá tối nay được nhận,evtinfoCon trỏ nên được đúc đến APGEVENTCONNRESET *. Mặc dù chứaPGConnchỉ là Đặt lại, tất cả dữ liệu sự tỷ lệ kèo bóng đá tối nay vẫn không thay đổi. Sự tỷ lệ kèo bóng đá tối nay này nên được sử dụng để đặt lại/tải lại/yêu cầu bất kỳ liên quan nàoInstancedata. Lưu ý rằng ngay cả khi Quy trình sự tỷ lệ kèo bóng đá tối nay không xử lýPGEVT_CONNRESET, nó vẫn sẽ nhận đượcPGEVT_ConnDestroySự tỷ lệ kèo bóng đá tối nay khi Kết nối được đóng.
Sự tỷ lệ kèo bóng đá tối nay phá hủy kết nối được bắn để phản hồipqfinish
. Đó là sự tỷ lệ kèo bóng đá tối nay
Trách nhiệm của thủ tục là làm sạch đúng sự tỷ lệ kèo bóng đá tối nay của mình
Dữ liệu là libpq không có khả năng quản lý bộ nhớ này.
Không làm sạch sẽ dẫn đến rò rỉ bộ nhớ.
Cấu trúc typedef Pgconn *Conn; PgEventConnDestroy;
Khi APGEVT_ConnDestroySự tỷ lệ kèo bóng đá tối nay được nhận,evtinfoCon trỏ nên được đúc đến ApgEventConnDestroy *. Sự tỷ lệ kèo bóng đá tối nay này là
bị sa thải trướcpqfinish
Thực hiện bất kỳ việc dọn dẹp nào khác. Giá trị trả về của
Quy trình sự tỷ lệ kèo bóng đá tối nay bị bỏ qua vì không có cách nào
chỉ ra một thất bại từpqfinish
. Ngoài ra, một thủ tục sự tỷ lệ kèo bóng đá tối nay
Thất bại không nên hủy bỏ quá trình dọn dẹp
bộ nhớ không mong muốn.
Sự tỷ lệ kèo bóng đá tối nay tạo kết quả được bắn để đáp ứng với bất kỳ
Chức năng thực thi truy vấn tạo kết quả,
bao gồmPQGetResult
. Cái này
sự tỷ lệ kèo bóng đá tối nay sẽ chỉ được bắn sau khi kết quả đã được
đã tạo thành công.
Cấu trúc typedef Pgconn *Conn; Pgresult *kết quả; PgEventResultcreate;
Khi APGEVT_RESULTCREATESự tỷ lệ kèo bóng đá tối nay được nhận,EVTINFOCon trỏ nên được đúc đến APGEVENTRESULTCREATE *. TheConnKết nối được sử dụng để tạo
kết quả. Đây là nơi lý tưởng để khởi tạo bất kỳInstancedatacần phải
liên kết với kết quả. Nếu thủ tục sự tỷ lệ kèo bóng đá tối nay không thành công,
Kết quả sẽ được xóa và sự thất bại sẽ
tuyên truyền. Quy trình sự tỷ lệ kèo bóng đá tối nay không được cố gắngPQClear
Đối tượng kết quả
cho chính nó. Khi trả lại mã thất bại, tất cả dọn dẹp
Phải được thực hiện dưới dạng tỷ lệ kèo bóng đá tối nayPGEVT_RESULTDESTROYSự tỷ lệ kèo bóng đá tối nay sẽ được
đã gửi.
Sự tỷ lệ kèo bóng đá tối nay bản sao kết quả được bắn để phản hồiPQCopyresult
. Sự tỷ lệ kèo bóng đá tối nay này
Sẽ chỉ được bắn sau khi bản sao hoàn tất. Chỉ sự tỷ lệ kèo bóng đá tối nay
các thủ tục đã xử lý thành côngPGEVT_RESULTCREATEhoặcPGEVT_RESULTCOPYSự tỷ lệ kèo bóng đá tối nay cho nguồn
Kết quả sẽ nhận đượcPGEVT_RESULTCOPYSự tỷ lệ kèo bóng đá tối nay.
Cấu trúc typedef const pgresult *src; Pgresult *Dest; PgEventResultcopy;
Khi APGEVT_RESULTCOPYSự tỷ lệ kèo bóng đá tối nay được nhận,evtinfoCon trỏ nên được đúc đến APGEVENTRESULTCOPY *. TheSRCKết quả là những gì đã được sao chép trong khiDestKết quả là bản sao điểm đến. Sự tỷ lệ kèo bóng đá tối nay này có thể được sử dụng để cung cấp một bản sao củaInstancedata, kể từPQCopyresultKhông thể làm điều đó. Nếu như Quy trình sự tỷ lệ kèo bóng đá tối nay không thành công, toàn bộ hoạt động sao chép sẽ thất bại vàDestKết quả sẽ được xóa. Khi trả lại mã thất bại, tất cả dọn dẹp Phải được thực hiện dưới dạng tỷ lệ kèo bóng đá tối nayPGEVT_RESULTDESTROYSự tỷ lệ kèo bóng đá tối nay sẽ được gửi cho kết quả đích.
Sự tỷ lệ kèo bóng đá tối nay phá hủy kết quả được bắn để đáp ứng vớiPQClear
. Đó là sự tỷ lệ kèo bóng đá tối nay
Trách nhiệm của thủ tục là làm sạch đúng sự tỷ lệ kèo bóng đá tối nay của mình
Dữ liệu là libpq không có khả năng quản lý bộ nhớ này.
Không làm sạch sẽ dẫn đến rò rỉ bộ nhớ.
Cấu trúc typedef Pgresult *kết quả; PgEventResultdestroy;
Khi APGEVT_RESULTDESTROYSự tỷ lệ kèo bóng đá tối nay được nhận,evtinfoCon trỏ nên được đúc đến APGEVENTRESULTDESTROY *. Sự tỷ lệ kèo bóng đá tối nay này là
bị sa thải trướcPQClear
Thực hiện bất kỳ việc dọn dẹp nào khác. Giá trị trả về của
Quy trình sự tỷ lệ kèo bóng đá tối nay bị bỏ qua vì không có cách nào
chỉ ra một thất bại từPQClear
. Ngoài ra, một thủ tục sự tỷ lệ kèo bóng đá tối nay
Thất bại không nên hủy bỏ quá trình dọn dẹp
bộ nhớ không mong muốn.
PGEVENTPROClà một typedef cho một con trỏ đến một thủ tục sự tỷ lệ kèo bóng đá tối nay, nghĩa là người dùng Chức năng gọi lại nhận được các sự tỷ lệ kèo bóng đá tối nay từ libpq. Các Chữ ký của một thủ tục sự tỷ lệ kèo bóng đá tối nay phải là
21067_21142
TheEVTIDtham số
chỉ ra cái nàoPGEVTSự tỷ lệ kèo bóng đá tối nay
xảy ra. TheevtinfoCon trỏ
phải được đúc theo loại cấu trúc thích hợp để có được
Thông tin thêm về sự tỷ lệ kèo bóng đá tối nay. TheVượt quatham số là con trỏ
được cung cấp chopqregistereventProc
Khi sự tỷ lệ kèo bóng đá tối nay
Thủ tục đã được đăng ký. Chức năng sẽ trả về một
Giá trị không phải là thành công và không nếu nó thất bại.
Một quy trình sự tỷ lệ kèo bóng đá tối nay cụ thể chỉ có thể được đăng ký Một lần trong bất kỳPGConn. Đây là bởi vì địa chỉ của thủ tục được sử dụng như một tra cứu khóa để xác định dữ tỷ lệ kèo bóng đá tối nay thể hiện được liên kết.
THẬN TRỌNG |
Trên Windows, các chức năng có thể có hai khác nhau Địa chỉ: một địa chỉ có thể nhìn thấy từ bên ngoài DLL và Một cái khác có thể nhìn thấy từ bên trong DLL. Một người nên Hãy cẩn thận rằng chỉ có một trong những địa chỉ này là được sử dụng vớilibpq22609_22839tĩnh. Nếu Địa chỉ thủ tục phải có sẵn bên ngoài Tệp nguồn riêng, hiển thị một chức năng riêng biệt để trả về địa chỉ. |
pqregistereventProc
Đăng ký quy trình gọi lại sự tỷ lệ kèo bóng đá tối nay với libpq.
int pqregistereventProc (PGConn *Conn, PGEVEN const char *name, void *passthrough);
Một quy trình sự tỷ lệ kèo bóng đá tối nay phải được đăng ký một lần trên mỗiPGConnBạn muốn nhận Sự tỷ lệ kèo bóng đá tối nay về. Không có giới hạn, ngoài bộ nhớ, trên số lượng các thủ tục sự tỷ lệ kèo bóng đá tối nay có thể được đăng ký với một kết nối. Hàm trả về giá trị khác không Nếu nó thành công và không nếu nó thất bại.
TheProcĐối số sẽ được được gọi khi một sự tỷ lệ kèo bóng đá tối nay LibPQ được sa thải. Địa chỉ bộ nhớ của nó là Cũng được sử dụng để tra cứuInstancedata. ThetênĐối số được sử dụng để tham khảo Quy trình sự tỷ lệ kèo bóng đá tối nay trong thông báo lỗi. Giá trị này không thể là NULL hoặc một chuỗi không có độ dài. Chuỗi tên được sao chép vàoPGConn, vậy là gì thông qua tỷ lệ kèo bóng đá tối nay cần phải sống lâu. TheVượt quaCon trỏ được truyền đếnProcBất cứ khi nào một sự tỷ lệ kèo bóng đá tối nay xảy ra. Đối số này có thể là NULL.
pqsetInstanceata
Đặt Instancedata của Conn cho Proc thành dữ tỷ lệ kèo bóng đá tối nay. Cái này Trả về không phải cho thành công và không cho thất bại. (Thất bại chỉ có thể xảy ra nếu Proc chưa được Đã đăng ký đúng trong Conn.)
25423_25509
pqinstancedata
Trả về Instancedata của Conn được liên kết với Proc, hoặc null nếu tỷ lệ kèo bóng đá tối nay có.
void *pqinstancedata (const pgconn *Conn, pgEventProc Proc);
pqresultsetinstancedata
Đặt Instancedata của kết quả cho Proc thành dữ tỷ lệ kèo bóng đá tối nay. Cái này Trả về không phải cho thành công và không cho thất bại. (Thất bại chỉ có thể xảy ra nếu Proc chưa được Đã đăng ký đúng trong kết quả.)
26469_26562
pqresultinstancedata
Trả về Instanceata của kết quả được liên kết với Proc, hoặc null nếu tỷ lệ kèo bóng đá tối nay có.
26942_27028
Đây là một ví dụ về bộ xương về việc quản lý dữ tỷ lệ kèo bóng đá tối nay riêng tư được liên kết với kết nối và kết quả LibPQ.
/ * Tiêu đề bắt buộc cho các sự tỷ lệ kèo bóng đá tối nay libpq (Lưu ý: Bao gồm libpq-fe.h) *// #include <libpq-events.h / * Instancedata */ Cấu trúc typedef int n; char *str; mydata; / * PgEventProc */ tĩnh int myEventProc (pgEventid evtid, void *evtinfo, void *passthrough); int Main (Void) Dữ liệu MyData *; Pgresult *res; Pgconn *Conn = pqConnectDB ("dbname = postgres"); if (pqstatus (Conn)! = Connection_ok) fprintf (stderr, "kết nối với cơ sở dữ liệu không thành công: %s", Pqerrormessage (Conn)); Pqfinish (Conn); trả lại 1; /* Được gọi một lần trên bất kỳ kết nối nào sẽ nhận được sự tỷ lệ kèo bóng đá tối nay. * Gửi PGEVT_Register đến MyEventProc. */ if (! fprintf (stderr, "không thể đăng ký pgEventProc \ n"); Pqfinish (Conn); trả lại 1; / * Conn Instancedata có sẵn */ data = pqinstancedata (Conn, myEventProc); / * Gửi PGEVT_RESULTCREATE đến MyEventProc */ res = pqExec (Conn, "chọn 1 + 1"); / * kết quả instancedata có sẵn */ data = pqresultinstancedata (res, myEventProc); / * Nếu sử dụng PG_Copyres_Events, hãy gửi PGEVT_RESULTCOPY đến MyEventProc */ res_copy = pqcopyresult (res, pg_copyres_tuples | pg_copyres_events); /* kết quả Instancedata có sẵn nếu pg_copyres_events là * Được sử dụng trong cuộc gọi PQCopyresult. */ data = pqresultinstanceata (res_copy, myEventProc); / * Cả hai xóa đều gửi pgevt_resultdestroy đến myeventproc */ PQCLEAR (RES); PQClear (res_copy); / * Gửi PGEVT_ConnDestroy đến MyEventProc */ Pqfinish (Conn); trả lại 0; Tĩnh int myEventProc (pgEventid evtid, void *evtinfo, void *passthrough) chuyển đổi (EVTID) Case PGEVT_REGISTER: PGEVENTREGISTER *E = (PGEVENTREGISTER *) EVTINFO; mydata *data = get_mydata (e- Conn); / * liên kết dữ liệu cụ thể của ứng dụng với kết nối */ PqsetInstanceata (e- Conn, myEventProc, dữ liệu); phá vỡ; CASE PGEVT_CONNRESET: PgEventConnReset *e = (pgEventConnReset *) evtinfo; mydata *data = pqinstancedata (e- Conn, myEventProc); Nếu (dữ liệu) memset (dữ liệu, 0, sizeof (mydata)); phá vỡ; Case PGEVT_ConnDestroy: PgEventConnDestroy *e = (pgEventConnDestroy *) evtinfo; mydata *data = pqinstancedata (e- Conn, myEventProc); / * dữ liệu thể hiện miễn phí vì Conn đang bị phá hủy *// Nếu (dữ liệu) free_mydata (dữ liệu); phá vỡ; Case PGEVT_RESULTCREATE: PgEventResultCreate *e = (pgEventResultCreate *) evtinfo; mydata *Conn_data = pqInstanceTa (e- Conn, myEventProc); mydata *res_data = DUP_MYDATA (Conn_data); / * liên kết dữ liệu cụ thể của ứng dụng với kết quả (sao chép nó từ Conn) */ Pqsetresultinstancedata (e- result, myEventProc, res_data); phá vỡ; trường hợp pgevt_resultcopy: PgEventResultcopy *e = (pgEventResultcopy *) evtinfo; mydata *src_data = pqresultinstancedata (e- src, myEventProc); mydata *dest_data = DUP_MYDATA (src_data); / * Liên kết dữ liệu cụ thể của ứng dụng với kết quả (sao chép nó từ kết quả) */ Pqsetresultinstancedata (e- dest, myEventProc, dest_data); phá vỡ; Case PGEVT_RESULTDESTROY: PgEventResultdestroy *e = (pgEventResultdestroy *) evtinfo; mydata *data = pqresultinstancedata (e- result, myEventProc); / * dữ liệu thể hiện miễn phí vì kết quả đang bị phá hủy *// Nếu (dữ liệu) free_mydata (dữ liệu); phá vỡ; /* ID sự tỷ lệ kèo bóng đá tối nay không xác định, chỉ cần trả về true. */ mặc định: phá vỡ; trả lại đúng; / * Xử lý sự tỷ lệ kèo bóng đá tối nay đã thành công */