libpqHệ thống sự kèo bóng đá pháp được thiết kế để thông báo cho các trình xử lý sự kèo bóng đá pháp đã đăng ký về thú vịlibpqCác sự kèo bóng đá pháp, chẳng hạn như tạo hoặc phá hủyPGConn
và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ớiPGConn
hoặcpgresult
và đả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ự kèo bóng đá pháp đã đă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ộtPass-thông quaCon trỏ được cung cấp bởi ứng dụng khi trình xử lý sự kèo bóng đá pháp được đăng ký vớiPGConn
. Con trỏ truyền qua kèo bóng đá pháp bao giờ thay đổi cho cuộc sống củaPGConn
và tất cảpgresult
S được tạo ra 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.dữ liệu thể hiệnCon trỏ bắt đầunull
Trong mỗiPGConn
vàPGRESULT
. Con trỏ này có thể được thao tác bằng cách sử dụngpqinstancedata
, pqsetInstanceata
, pqresultinstancedata
vàPQResultsetInstanceata
chức năng. Lưu ý rằng kèo bóng đá pháp giống như con trỏ truyền qua, dữ liệu phiên bản củaPGConn
kèo bóng đá pháp được kế thừa tự động bởipgresult
S được tạo từ nó.libpqKhông biết những con trỏ dữ liệu truyền qua và ví dụ 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 người xử lý sự kèo bóng đá pháp.
enumPGEVENTID
Đặt tên cho các loại sự kèo bóng đá pháp được xử lý bởi hệ thống sự kèo bóng đá pháp. Tất cả các giá trị của nó có tên bắt đầu bằngPGEVT
. Đối với mỗi loại sự kèo bóng đá pháp, có một cấu trúc thông tin sự kèo bóng đá pháp tương ứng mang các tham số được truyền cho trình xử lý sự kèo bóng đá pháp.
PGEVT_REGISTER
#Sự kèo bóng đá pháp đăng ký xảy ra khiPQRegisterEventProc
được gọi. Đó là thời điểm lý tưởng để khởi tạo bất kỳInstancedata
Một thủ tục sự kèo bóng đá pháp có thể cần. Chỉ có một sự kèo bóng đá pháp đăng ký sẽ được sa thải trên mỗi người xử lý sự kèo bóng đá pháp cho mỗi kết nối.
Cấu trúc typedef
Khi APGEVT_REGISTER
Sự kèo bóng đá pháp được nhận,evtinfo
Con trỏ nên được đúc đến APGEVENTREGISTER *
. Cấu trúc này chứaPGConn
nên có trongConnection_ok
trạ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 kèo bóng đá phápPGEVT_ConnDestroy
Sự kèo bóng đá pháp sẽ được gửi.
PGEVT_CONNRESET
#Sự kèo bóng đá pháp đặ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ự kèo bóng đá pháp chỉ được bắn nếu thiết lập lại thành công.PostgreSQLV15 trở lên. Tuy nhiên, với các phiên bản trước đó, điều quan trọng là phải trả lại thành công (khác kèo bóng đá pháp) hoặc kết nối sẽ bị hủy bỏ.
Cấu trúc typedef
Khi APGEVT_CONNRESET
Sự kèo bóng đá pháp được nhận,EVTINFO
Con trỏ nên được đúc đến APGEVENTCONNRESET *
. Mặc dù được chứaPGConn
chỉ được đặt lại, tất cả dữ liệu sự kèo bóng đá pháp vẫn không thay đổi. Sự kèo bóng đá pháp 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ự kèo bóng đá pháp không xử lýPGEVT_CONNRESET
, nó vẫn sẽ nhận đượcPGEVT_ConnDestroy
Sự kèo bóng đá pháp khi kết nối được đóng.
PGEVT_ConnDestroy
#Sự kèo bóng đá pháp phá hủy kết nối được bắn để phản hồipqfinish
. Trách nhiệm của thủ tục sự kèo bóng đá pháp là làm sạch dữ liệu sự kèo bóng đá pháp của mình vì LibPQ không có khả năng quản lý bộ nhớ này.
Cấu trúc typedef
Khi APGEVT_ConnDestroy
Sự kèo bóng đá pháp được nhận,EVTINFO
Con trỏ nên được đúc đến ApgEventConnDestroy *
. Sự kèo bóng đá pháp 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ự kèo bóng đá pháp 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ự kèo bóng đá pháp không nên hủy bỏ quá trình làm sạch bộ nhớ không mong muốn.
PGEVT_RESULTCREATE
#Sự kèo bóng đá pháp 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ự kèo bóng đá pháp này sẽ chỉ được bắn sau khi kết quả đã được tạo thành công.
Cấu trúc typedef
Khi APGEVT_RESULTCREATE
Sự kèo bóng đá pháp được nhận,evtinfo
Con trỏ nên được chuyển đến APGEVENTRESULTCREATE *
. TheConn
là 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ỳInstancedata
cần được liên kết với kết quả. Nếu một thủ tục sự kèo bóng đá pháp không thành công (trả về số 0), quy trình sự kèo bóng đá pháp đó sẽ bị bỏ qua trong thời gian tồn tại còn lại của kết quả;PGEVT_RESULTCOPY
hoặcPGEVT_RESULTDESTROY
Sự kèo bóng đá pháp cho kết quả hoặc kết quả này được sao chép từ nó.
PGEVT_RESULTCOPY
#Sự kèo bóng đá pháp bản sao kết quả được bắn để phản hồiPQCopyresult
. Sự kèo bóng đá pháp này sẽ chỉ được bắn sau khi bản sao hoàn tất.PGEVT_RESULTCREATE
hoặcPGEVT_RESULTCOPY
Sự kèo bóng đá pháp cho kết quả nguồn sẽ nhận đượcPGEVT_RESULTCOPY
Sự kèo bóng đá pháp.
Cấu trúc typedef
Khi APGEVT_RESULTCOPY
Sự kèo bóng đá pháp được nhận,evtinfo
Con trỏ nên được đúc đến APGEVENTRESULTCOPY *
. TheSRC
Kết quả là những gì đã được sao chép trong khiDest
Kết quả là điểm đến sao chép. Sự kèo bóng đá pháp này có thể được sử dụng để cung cấp một bản sao sâu củaInstancedata
, kể từPQCopyresult
Không thể làm điều đó. Nếu một thủ tục sự kèo bóng đá pháp không thành công (trả về số 0), quy trình sự kèo bóng đá pháp đó sẽ bị bỏ qua trong thời gian tồn tại còn lại của kết quả mới;PGEVT_RESULTCOPY
hoặcPGEVT_RESULTDESTROY
Sự kèo bóng đá pháp cho kết quả đó hoặc kết quả được sao chép từ nó.
PGEVT_RESULTDESTROY
#Sự kèo bóng đá pháp phá hủy kết quả được bắn để đáp ứng vớiPQClear
. Trách nhiệm của thủ tục sự kèo bóng đá pháp là làm sạch dữ liệu sự kèo bóng đá pháp của mình vì LibPQ không có khả năng quản lý bộ nhớ này.
Cấu trúc typedef
Khi APGEVT_RESULTDESTROY
Sự kèo bóng đá pháp được nhận,evtinfo
Con trỏ nên được đúc đến APGEVENTRESULTDESTROY *
. Sự kèo bóng đá pháp 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ự kèo bóng đá pháp 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ự kèo bóng đá pháp không nên hủy bỏ quá trình làm sạch bộ nhớ không mong muốn.
PGEVENTPROC
#PGEVENTPROC
là một typedef cho một con trỏ đến quy trình sự kèo bóng đá pháp, nghĩa là chức năng gọi lại của người dùng nhận các sự kèo bóng đá pháp từ libpq. Chữ ký của thủ tục sự kèo bóng đá pháp phải là
22394_22462
TheEVTID
Tham số cho biếtPGEVT
Sự kèo bóng đá pháp đã xảy ra. Theevtinfo
Con trỏ phải được chuyển vào loại cấu trúc thích hợp để có thêm thông tin về sự kèo bóng đá pháp này. TheVượt qua
tham số là con trỏ được cung cấp choPQRegisterEventProc
Khi thủ tục sự kèo bóng đá pháp được đăng ký. Hàm sẽ trả về một giá trị khác không nếu nó thành công và không nếu nó thất bại.
Một quy trình sự kèo bóng đá pháp 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.
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ớilibpq23657_23815tĩ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ự kèo bóng đá pháp với libpq.
int pqregistereventProc (PGConn *Conn, PGEVEN
Một quy trình sự kèo bóng đá pháp phải được đăng ký một lần trên mỗiPGConn
Bạn muốn nhận các sự kèo bóng đá pháp về. Không có giới hạn, ngoài bộ nhớ, về số lượng các quy trình sự kèo bóng đá pháp có thể được đăng ký với kết nối.
TheProc
Đối số sẽ được gọi khi một sự kèo bóng đá pháp 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ự kèo bóng đá pháp trong các thông báo lỗi. Giá trị này không thể lànull
hoặc chuỗi kèo bóng đá pháp độ dài. Chuỗi tên được sao chép vàoPGConn
, Vì vậy, những gì được thông qua kèo bóng đá pháp cần phải tồn tại lâu dài. TheVượt qua
Con trỏ được chuyển choProc
Bất cứ khi nào một sự kèo bóng đá pháp xảy ra. Đối số này có thể lànull
.
pqsetInstanceata
#Đặt kết nốiConn
'sInstancedata
cho thủ tụcProc
đếnData
. Điều này trả về kèo bóng đá pháp phải cho thành công và kèo bóng đá pháp cho thất bại.Proc
chưa được đăng ký đúng trongConn
.)
26686_26756
pqinstancedata
#Trả về kết nốiConn
'sInstancedata
được liên kết với thủ tụcProc
hoặcnull
Nếu kèo bóng đá pháp có.
void *pqinstancedata (const pgconn *Conn, pgEventProc Proc);
PQResultsetInstanceata
#Đặt kết quảInstancedata
choProc
đếnData
. Điều này trả về kèo bóng đá pháp phải cho thành công và kèo bóng đá pháp cho thất bại.Proc
chưa được đăng ký đúng trong kết quả.)
28081_28158
Hãy cẩn thận rằng bất kỳ lưu trữ nào được đại diện bởiData
sẽ kèo bóng đá pháp được tính bởiPQResultMemorySize
, trừ khi nó được phân bổ bằng cách sử dụngPQResultalloc
. (Làm như vậy được khuyến nghị vì nó loại bỏ sự cần thiết phải giải phóng lưu trữ như vậy một cách rõ ràng khi kết quả bị phá hủy.)
pqresultinstancedata
#Trả về kết quảInstancedata
được liên kết vớiProc
hoặcnull
Nếu kèo bóng đá pháp có.
29191_29261
Đâ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.
/ * Tiêu đề bắt buộc cho các sự kèo bóng đá pháp libpq (Lưu ý: Bao gồm libpq-fe.h) *//