PostgreSQL: kèo bóng đá hôm | |||
---|---|---|---|
prev | UP | Chương 32.libpq- C Thư viện | Tiếp theo |
libpqHệ thống sự tỷ lệ kèo bóng đá tối nay được thiết kế để thông báo cho Trình xử lý sự tỷ lệ kèo bóng đá tối nay đã đăng ký về thú vịlibpqCác sự tỷ lệ kèo bóng đá tối nay, chẳng hạn như sự sáng tạo hoặc phá hủyPGConnvàpgresultĐối tượng. Trường hợp sử dụng chính là điều này cho phép các ứng dụng liên kết dữ liệu của riêng họ vớiPGConnhoặcpgresultvà đảm bảo rằng dữ liệu đó được giải phóng vào một thời điểm 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 dữ liệu, được biết đếnlibpqchỉ dưới dạng mờvoid *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ữ liệu tồn tại lâu. Ngoài ra còn códữ liệu thể hiệnCon trỏ, bắt đầunullTrong mỗiPGConnvàpgresult. Con trỏ này có thể được thao tác bằng cách sử dụngpqinstancedata
, pqsetInstanceata
, pqresultinstancedata
vàPQSetResultInstanceata
chức năng. Lưu ý rằng tỷ lệ kèo bóng đá tối nay giống như con trỏ qua, dữ liệu thể hiện củ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 con trỏ dữ liệu và thông tin nào chỉ ra (nếu có) và sẽ không bao giờ cố gắng giải phóng chúng - đó là trách nhiệm của trình xử lý sự tỷ lệ kèo bóng đá tối nay.
enumPGEVENTIDĐặt tên cho các loại 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ằngPGEVT11366_11515
Sự tỷ lệ kèo bóng đá tối nay đăng ký xảy ra khipqregistereventProc
được gọi. Đó là thời điểm lý tưởng để khởi tạo bất kỳ11819_11833Một thủ tục 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 trên mỗi người xử lý sự tỷ lệ kèo bóng đá tối nay cho mỗi kết nối. Nếu thủ tục sự tỷ lệ kèo bóng đá tối nay không thành công, việc đă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ứaPGConnnên có trongConnection_oktrạng thái; Đảm bảo nếu một người gọipqregistereventProc
Ngay sau khi có được một điều tốtPGConn. Khi trả lại mã thất bại, tất cả các công việ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_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ỉ được bắn nếu thiết lập lại thành công. Nếu thủ tục sự tỷ lệ kèo bóng đá tối nay không thành công, toàn bộ thiết lập lại kết nối sẽ không thành công; ThePGConnđược đặt 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ù được chứaPGConnchỉ được đặ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 để đáp ứng vớipqfinish
. Trách nhiệm của thủ tục sự tỷ lệ kèo bóng đá tối nay là làm sạch dữ liệu sự tỷ lệ kèo bóng đá tối nay của mình vì 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 được bắn 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 thủ tục sự tỷ lệ kèo bóng đá tối nay bị bỏ qua vì không có cách nào chỉ ra sự thất bại từpqfinish
. Ngoài ra, một lỗi thủ tục sự tỷ lệ kèo bóng đá tối nay không nên hủy bỏ quá trình làm sạch 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 nào tạo ra kết quả, bao gồmPQGetResult
. Sự tỷ lệ kèo bóng đá tối nay này 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 *. TheConnlà kế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 được 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ẽ được lan 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ả các công việ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ỉ các quy trình sự tỷ lệ kèo bóng đá tối nay đã xử lý thành côngPGEVT_RESULTCREATEhoặcPGEVT_RESULTCOPYSự tỷ lệ kèo bóng đá tối nay cho kết quả nguồn 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à điểm đến sao chép. 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 sâu củaInstancedata, kể từPQCopyresultKhông thể làm điều đó. Nếu thủ tục 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ả các công việ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
. Trách nhiệm của thủ tục sự tỷ lệ kèo bóng đá tối nay là làm sạch dữ liệu sự tỷ lệ kèo bóng đá tối nay của mình vì 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 được bắn 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 thủ tục sự tỷ lệ kèo bóng đá tối nay bị bỏ qua vì không có cách nào chỉ ra sự thất bại từPQClear
. Ngoài ra, một lỗi thủ tục sự tỷ lệ kèo bóng đá tối nay không nên hủy bỏ quá trình làm sạch bộ nhớ không mong muốn.
PGEVENTPROClà một typedef cho một con trỏ đến quy trình sự tỷ lệ kèo bóng đá tối nay, nghĩa là chức năng gọi lại của người dùng nhận được các sự tỷ lệ kèo bóng đá tối nay từ libpq. Chữ ký của thủ tục sự tỷ lệ kèo bóng đá tối nay phải là
19136_19202
TheEVTIDTham số cho biếtPGEVTSự tỷ lệ kèo bóng đá tối nay đã xảy ra. TheevtinfoCon trỏ phải được chuyển đến loại cấu trúc phù hợp để có thêm thông tin về sự tỷ lệ kèo bóng đá tối nay này. TheVượt quatham số là con trỏ được cung cấp choPQRegisterEventProc
19590_19714
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. Điều này là do địa chỉ của thủ tục được sử dụng làm khóa tra cứu để xác định dữ liệu 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 địa chỉ khác nhau: một địa chỉ có thể nhìn thấy từ bên ngoài DLL và một địa chỉ khác có thể nhìn thấy từ bên trong DLL. Người ta nên cẩn thận rằng chỉ có một trong số các địa chỉ này được sử dụng vớilibpqCác chức năng gây ra sự tỷ lệ kèo bóng đá tối nay, sự nhầm lẫn khác sẽ dẫn đến. Quy tắc đơn giản nhất để viết mã sẽ hoạt động là đảm bảo rằng các quy trình sự tỷ lệ kèo bóng đá tối nay được khai báotĩnh. Nếu địa chỉ của thủ tục phải có sẵn bên ngoài tệp nguồn của riêng mình, hãy hiển thị một hàm riêng để 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.
21068_21187
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ỗiPGConn21280_21505
TheProcĐối số sẽ được gọi khi một sự tỷ lệ kèo bóng đá tối nay libpq được bắn. Địa chỉ bộ nhớ của nó cũng được sử dụng để tra cứuInstancedata. ThetênĐối số được sử dụng để chỉ quy trình sự tỷ lệ kèo bóng đá tối nay trong các thông báo lỗi. Giá trị này không thể lànull21834_21897PGConn21929_21979Vượt quaCon trỏ được truyền đếnProcBất cứ khi nào xảy ra sự tỷ lệ kèo bóng đá tối nay. Đối số này có thể lànull.
pqsetInstanceata
Đặt kết nốiConn'sInstancedatacho thủ tụcProcđếnData. Điều này trả về tỷ lệ kèo bóng đá tối nay phải cho thành công và tỷ lệ kèo bóng đá tối nay cho thất bại. (Thất bại chỉ có thể xảy ra nếuProcchưa được đăng ký đúng trongConn.)
22679_22747
pqinstancedata
Trả về kết nốiConn'sInstancedatađược liên kết với thủ tụcProchoặcnullNếu tỷ lệ kèo bóng đá tối nay có.
void *pqinstancedata (const pgconn *Conn, pgEventProc Proc);
PQResultsetInstanceata
Đặt kết quảInstancedatachoProcđếnData. Điều này trả về tỷ lệ kèo bóng đá tối nay phải cho thành công và tỷ lệ kèo bóng đá tối nay cho thất bại. (Thất bại chỉ có thể xảy ra nếuProcchưa được đăng ký đúng trong kết quả.)
23651_23726
pqresultinstancedata
Trả về kết quảInstancedatađược liên kết vớiProchoặcnullNếu tỷ lệ kèo bóng đá tối nay có.
24061_24129
Đây là một ví dụ về bộ xương về việc quản lý dữ liệu riêng tư liên quan đến kết nối và kết quả LibPQ.
24420_28480