Phiên bản được hỗ trợ:hiện tại(17) /16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4
Tài kèo bóng đá việt nam này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong các phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

31.12. Hệ thống sự kèo bóng đá việt nam

libpqHệ thống sự kèo bóng đá việt nam là Được thiết kế để thông báo cho các trình xử lý sự kèo bóng đá việt nam đã đăng ký về thú vịlibpqSự kèo bóng đá việt nam, chẳng hạn như Sáng tạo hoặc phá hủyPGConnpgresultĐố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ữ kèo bóng đá việt nam của riêng họ Với APGConnhoặcpgresultvà đảm bảo rằng dữ kèo bóng đá việt nam đó được giải phóng tại một thời gian thích hợp.

Mỗi trình xử lý sự kèo bóng đá việt nam đã đă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ự kèo bóng đá việt nam được đăng ký vớiPGConn. Con trỏ qua không 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ữ kèo bóng đá việt nam tồn tại lâu. Ngoài ra là mộtdữ kèo bóng đá việt nam thể hiệnCon trỏ, trong đó bắt đầu ranullTrong mỗiPGConnpgresult. Con trỏ này có thể được thao tác bằng cách sử dụng Thepqinstancedata, pqsetInstanceata, pqresultinstancedataPQSetResultInstanceatachức năng. Lưu ý rằng Không giống như con trỏ qua, dữ kèo bóng đá việt nam thể hiện của APGConnkhông đượ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ự kèo bóng đá việt nam.

31.12.1. Loại sự kèo bóng đá việt nam

enumPGEVENTIDTên các loại của các sự kèo bóng đá việt nam được xử lý bởi hệ thống sự kèo bóng đá việt nam. Tất cả các giá trị của nó có Tên bắt đầu bằngPGEVT. Cho mỗi Loại sự kèo bóng đá việt nam, có một cấu trúc thông tin sự kèo bóng đá việt nam tương ứng Mang các tham số được truyền cho người xử lý sự kèo bóng đá việt nam. Sự kèo bóng đá việt nam Các loại là:

PGEVT_REGISTER

Sự kèo bóng đá việt nam đă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 thủ tục sự kèo bóng đá việt nam có thể cần. Chỉ có một sự kèo bóng đá việt nam đăng ký sẽ được sa thải cho mỗi người xử lý sự kèo bóng đá việt nam trên mỗi kết nối. Nếu thủ tục sự kèo bóng đá việt nam thất bại, Đăng ký bị hủy bỏ.

Cấu trúc typedef

    Pgconn *Conn;
 PgEventRegister;

Khi A​​PGEVT_REGISTERSự kèo bóng đá việt nam đượ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ọiPQRegisterEventProcNgay 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ư khôngPGEVT_ConnDestroySự kèo bóng đá việt nam sẽ được gửi.

PGEVT_CONNRESET

Sự kèo bóng đá việt nam đặt lại kết nối được bắn khi hoàn thànhpqresethoặcpqresetpoll. Trong cả hai trường hợp, sự kèo bóng đá việt nam chỉ bị sa thải nếu thiết lập lại thành công. Nếu sự kèo bóng đá việt nam 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àpqresetpollsẽ trả vềPGRES_POLLING_FAILED.

Cấu trúc typedef

    Pgconn *Conn;
 PgEventConnReset;

Khi APGEVT_CONNRESETSự kèo bóng đá việt nam đượ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ự kèo bóng đá việt nam vẫn không thay đổi. Sự kèo bóng đá việt nam 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 đá việt nam không xử lýPGEVT_CONNRESET, nó vẫn sẽ nhận đượcPGEVT_ConnDestroySự kèo bóng đá việt nam khi Kết nối được đóng.

PGEVT_ConnDestroy

Sự kèo bóng đá việt nam phá hủy kết nối được bắn để phản hồipqfinish. Đó là sự kèo bóng đá việt nam Trách nhiệm của thủ tục là làm sạch đúng sự kèo bóng đá việt nam 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ự kèo bóng đá việt nam được nhận,evtinfoCon trỏ nên được đúc đến ApgEventConnDestroy *. Sự kèo bóng đá việt nam này là bị sa thải trướcpqfinishThự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ự kèo bóng đá việt nam 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ự kèo bóng đá việt nam 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.

PGEVT_RESULTCREATE

Sự kèo bóng đá việt nam 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ự kèo bóng đá việt nam 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èo bóng đá việt nam quả;
 PgEventResultcreate;

Khi APGEVT_RESULTCREATESự kèo bóng đá việt nam được nhận,evtinfoCon trỏ nên được chuyển đến APGEVENTRESULTCREATE *. TheConnkèo bóng đá việt nam nối được sử dụng để tạo kèo bóng đá việt nam 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ự kèo bóng đá việt nam 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ự kèo bóng đá việt nam không được cố gắngPQClearĐối tượng kèo bóng đá việt nam 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 khôngPGEVT_RESULTDESTROYSự kèo bóng đá việt nam sẽ được đã gửi.

PGEVT_RESULTCOPY

Sự kèo bóng đá việt nam bản sao kết quả được bắn để phản hồiPQCopyresult. Sự kèo bóng đá việt nam này Sẽ chỉ được bắn sau khi bản sao hoàn tất. Chỉ sự kèo bóng đá việt nam các thủ tục đã xử lý thành côngPGEVT_RESULTCREATEhoặcPGEVT_RESULTCOPYSự kèo bóng đá việt nam cho nguồn Kết quả sẽ nhận đượcPGEVT_RESULTCOPYSự kèo bóng đá việt nam.

Cấu trúc typedef

    const pgresult *src;
    Pgresult *Dest;
 PgEventResultcopy;

Khi APGEVT_RESULTCOPYSự kèo bóng đá việt nam được nhận,evtinfoCon trỏ nên được chuyển đến APGEVERRESULTCOPY *. TheSRCkèo bóng đá việt nam quả là những gì đã được sao chép trong khiDestKết quả là bản sao điểm đến. Sự kèo bóng đá việt nam 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ự kèo bóng đá việt nam không thành công, toàn bộ hoạt động sao chép sẽ thất bại vàDestkèo bóng đá việt nam 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 khôngPGEVT_RESULTDESTROYSự kèo bóng đá việt nam sẽ được gửi cho kết quả đích.

PGEVT_RESULTDESTROY

Sự kèo bóng đá việt nam phá hủy kết quả được bắn để đáp ứng vớiPQClear. Đó là sự kèo bóng đá việt nam Trách nhiệm của thủ tục là làm sạch đúng sự kèo bóng đá việt nam 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èo bóng đá việt nam quả;
 PgEventResultdestroy;

Khi APGEVT_RESULTDESTROYSự kèo bóng đá việt nam được nhận,evtinfopointer should be cast to aPGEVENTRESULTDESTROY *. Sự kèo bóng đá việt nam này là bị sa thải trướcPQClearThự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ự kèo bóng đá việt nam 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ự kèo bóng đá việt nam 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.

31.12.2. Quy trình gọi lại sự kèo bóng đá việt nam

PGEVENTPROC

PGEVENTPROClà một typedef cho một con trỏ đến một thủ tục sự kèo bóng đá việt nam, nghĩa là người dùng Chức năng gọi lại nhận được các sự kèo bóng đá việt nam từ libpq. Các Chữ ký của một thủ tục sự kèo bóng đá việt nam phải là

21001_21069

TheEVTIDTham số chỉ ra cái nàoPGEVTSự kèo bóng đá việt nam 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ự kèo bóng đá việt nam. TheVượt quatham số là con trỏ được cung cấp choPQRegisterEventProcKhi sự kèo bóng đá việt nam 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ự kèo bóng đá việt nam 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ữ kèo bóng đá việt nam 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ớilibpq22536_22766tĩ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ỉ.

31.12.3. Các chức năng hỗ trợ sự kèo bóng đá việt nam

PQRegisterEventProc

Đăng ký quy trình gọi lại sự kèo bóng đá việt nam với libpq.

int pqregistereventProc (PGConn *Conn, PGEVEN
                        const char *name, void *passthrough);

Một quy trình sự kèo bóng đá việt nam phải được đăng ký một lần trên mỗiPGConnBạn muốn nhận Sự kèo bóng đá việt nam về. Không có giới hạn, ngoài bộ nhớ, trên số lượng các thủ tục sự kèo bóng đá việt nam 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ự kèo bóng đá việt nam 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ự kèo bóng đá việt nam trong thông báo lỗi. Giá trị này không thể lànullhoặc chuỗi không độ dài. Các Tên chuỗi được sao chép vàoPGConn, vậy những gì được thông qua không cần phải sống lâu. TheVượt quaCon trỏ được truyền đếnProcBất cứ khi nào một sự kèo bóng đá việt nam xảy ra. Đối số này có thể lànull.

pqsetInstanceata

Đặt kèo bóng đá việt nam nốiConn'sInstanCedatacho thủ tụcProcđếnData. Điều 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ếuProcchưa được Đã đăng ký trongConn.)

25496_25566
pqinstancedata

Trả về kèo bóng đá việt nam nốiConn'sInstancedatađược liên kèo bóng đá việt nam với thủ tụcProchoặcnullNếu không có.

void *pqinstancedata (const pgconn *Conn, pgEventProc Proc);
PQResultsetInstanceata

Đặt kèo bóng đá việt nam quảInstancedatachoProcđếnData. Điều 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ếuProcchưa được đăng ký đúng kèo bóng đá việt nam quả.)

26708_26785
pqresultinstancedata

Trả về kèo bóng đá việt nam quảInstanCedatađược liên kèo bóng đá việt nam vớiProchoặcnullNếu không có.

27217_27287

31.12.4. Ví dụ về sự kèo bóng đá việt nam

Đây là một ví dụ về bộ xương về việc quản lý dữ kèo bóng đá việt nam 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ự kèo bóng đá việt nam 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ự kèo bóng đá việt nam.
     * 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ự kèo bóng đá việt nam không xác định, chỉ cần trả về true. */
        mặc định:
            phá vỡ;

    trả lại đúng; / * Xử lý sự kèo bóng đá việt nam đã thành công */