/* * testlibpq.c Kiểm tra phiên bản c của libpq, frontgres postgres * thư viện. * * */ #include <stdio.h #include "libpq-fe.h" Vô hiệu exit_nicely (pgconn *Conn) Pqfinish (Conn); Thoát (1); chủ yếu() char *pghost, *PGPORT, *pgoptions, *pgtty; char *dbname; int nfields; int i, j; / * Tập tin * gỡ lỗi; */ Pgconn *Conn; Pgresult *kèo bóng đá euro; /* * Bắt đầu, bằng cách đặt các tham số cho kết nối phụ trợ nếu * tham số là null, sau đó hệ thống sẽ cố gắng sử dụng hợp lý * Mặc định bằng cách tìm kiếm các biến môi trường hoặc, không thành công, * Sử dụng các hằng số cứng */ pghost = null; / * tên máy chủ của máy chủ phụ trợ */ pgport = null; / * cổng của máy chủ phụ trợ */ pgOptions = null; /* Các tùy chọn đặc biệt để bắt đầu phần phụ trợ * máy chủ */ pgtty = null; / * gỡ lỗi tty cho máy chủ phụ trợ *// dbname = "template1"; / * Tạo kết nối với cơ sở dữ liệu */ Conn = pqsetDB (pghost, pgport, pgOptions, pgtty, dbname); /* * Kiểm tra xem kết nối phụ trợ đã được thực hiện thành công */ if (pqstatus (Conn) == Connection_bad) fprintf (stderr, "kết nối với cơ sở dữ liệu '%s' không thành công. \ n", dbname); fprintf (stderr, "%s", pqerrormessage (Conn)); exit_nicely (Conn); /* gỡ lỗi = fopen ("/tmp/trace.out", "w"); */ /* Pqtrace (Conn, gỡ lỗi); */ / * Bắt đầu một khối giao dịch */ kèo bóng đá euro = pqExec (Conn, "bắt đầu"); if (pqresultstatus (kèo bóng đá euro)! = pgres_command_ok) fprintf (stderr, "lệnh bắt đầu không thành công \ n"); PQCLEAR (kèo bóng đá euro); exit_nicely (Conn); /* * PQClear pgresult có nên không còn cần thiết để tránh * rò rỉ bộ nhớ */ PQCLEAR (kèo bóng đá euro); /* * Tìm nạp các trường hợp từ PG_DATABASE, Danh mục hệ thống của * Cơ sở dữ liệu */ kèo bóng đá euro = pqExec (Conn, "khai báo con trỏ mycursor cho chọn * từ pg_database"); if (pqresultstatus (kèo bóng đá euro)! = pgres_command_ok) fprintf (stderr, "lệnh con trỏ tuyên bố không thành công \ n"); PQCLEAR (kèo bóng đá euro); exit_nicely (Conn); PQCLEAR (kèo bóng đá euro); kèo bóng đá euro = pqExec (Conn, "tìm nạp tất cả trong mycursor"); if (pqresultstatus (kèo bóng đá euro)! = pgres_tuples_ok) fprintf (stderr, "tìm nạp tất cả các lệnh không trả lại các bộ dữ liệu đúng cách \ n"); PQCLEAR (kèo bóng đá euro); exit_nicely (Conn); / * Đầu tiên, in ra tên thuộc tính */ nfields = pqnfields (kèo bóng đá euro); for (i = 0; i <nfields; i ++) printf ("%-15s", pqfname (kèo bóng đá euro, i)); printf ("\ n \ n"); / * Tiếp theo, in ra các trường hợp */ for (i = 0; i <pqntuples (kèo bóng đá euro); i ++) for (j = 0; j <nfields; j ++) printf ("%-15s", pqgetValue (kèo bóng đá euro, i, j)); printf ("\ n"); PQCLEAR (kèo bóng đá euro); / * Đóng con trỏ */ kèo bóng đá euro = pQExec (Conn, "Đóng Mycursor"); PQCLEAR (kèo bóng đá euro); / * cam kết giao dịch */ kèo bóng đá euro = pqExec (Conn, "cam kết"); PQCLEAR (kèo bóng đá euro); / * Đóng kết nối với cơ sở dữ liệu và dọn dẹp */ Pqfinish (Conn); /* fclose (gỡ lỗi); */
/* * Testlibpq2.c kiểm tra giao diện thông báo không đồng bộ * * Duy xuất một cơ sở dữ liệu với các mục sau: * * Tạo bảng tbl1 (i int4); * * Tạo bảng tbl2 (i int4); * * Tạo quy tắc R1 như khi chèn vào TBL1 làm [chèn vào các giá trị TBL2 * (mới.i); Thông báo cho TBL2]; * * Sau đó bắt đầu chương trình này sau khi chương trình bắt đầu, làm * * Chèn vào các giá trị TBL1 (10); * * * */ #include <stdio.h #include "libpq-fe.h" Vô hiệu exit_nicely (pgconn *Conn) Pqfinish (Conn); Thoát (1); chủ yếu() char *pghost, *PGPORT, *pgoptions, *pgtty; char *dbname; int nfields; int i, j; Pgconn *Conn; Pgresult *kèo bóng đá euro; Pgnotify *thông báo; /* * Bắt đầu, bằng cách đặt các tham số cho kết nối phụ trợ nếu * tham số là null, sau đó hệ thống sẽ cố gắng sử dụng hợp lý * Mặc định bằng cách tìm kiếm các biến môi trường hoặc, không thành công, * Sử dụng các hằng số cứng */ pghost = null; / * tên máy chủ của máy chủ phụ trợ */ pgport = null; / * cổng của máy chủ phụ trợ */ pgOptions = null; /* Các tùy chọn đặc biệt để bắt đầu phần phụ trợ * máy chủ */ pgtty = null; / * gỡ lỗi tty cho máy chủ phụ trợ *// dbname = getenv ("người dùng"); /* Thay đổi cái này thành tên của bài kiểm tra của bạn * cơ sở dữ liệu */ / * Tạo kết nối với cơ sở dữ liệu */ Conn = pqsetDB (pghost, pgport, pgOptions, pgtty, dbname); /* * Kiểm tra xem kết nối phụ trợ đã được thực hiện thành công */ if (pqstatus (Conn) == Connection_bad) fprintf (stderr, "kết nối với cơ sở dữ liệu '%s' không thành công. \ n", dbname); fprintf (stderr, "%s", pqerrormessage (Conn)); exit_nicely (Conn); kèo bóng đá euro = pQExec (Conn, "Nghe TBL2"); if (pqresultstatus (kèo bóng đá euro)! = pgres_command_ok) fprintf (stderr, "lệnh nghe không thành công \ n"); PQCLEAR (kèo bóng đá euro); exit_nicely (Conn); /* * PQClear pgresult có nên không còn cần thiết để tránh * rò rỉ bộ nhớ */ PQCLEAR (kèo bóng đá euro); while (1) /* * Chờ một chút giữa các séc; Đang chờ với Select () * sẽ hiệu quả hơn. */ ngủ (1); / * Thu thập bất kỳ tin nhắn phụ trợ không đồng bộ nào *// PQConsumeInput (Conn); / * Kiểm tra tin nhắn thông báo không đồng bộ *// while ((thông báo = pqnotifyes (Conn))! = null) fprintf (stderr, "Async thông báo về '%s' từ phụ trợ pid '%d' nhận \ n", thông báo- relname, thông báo- be_pid); miễn phí (thông báo); / * Đóng kết nối với cơ sở dữ liệu và dọn dẹp */ Pqfinish (Conn);
/* * testlibpq3.c kiểm tra phiên bản C của libpq, frontgres postgres * thư viện. Kiểm tra giao diện con trỏ nhị phân * * * * Tập hợp một cơ sở dữ liệu bằng cách thực hiện như sau: * * Tạo bảng TEST1 (I Int4, D Float4, P Polygon); * * Chèn vào các giá trị Test1 (1, 3.567, '(3.0, 4.0, 1.0, * 2.0) ':: Polygon); * * Chèn vào các giá trị Test1 (2, 89,05, '(4.0, 3.0, 2.0, * 1.0) ':: Polygon); * * Đầu ra dự kiến là: * * Tuple 0: Got i = (4 byte) 1, d = (4 byte) 3.567000, p = (4 * byte) 2 điểm giới hạn hộp = (HI = 3.000000/4.000000, LO = * 1.000000.2.000000) Tuple 1: Got i = (4 byte) 2, d = (4 byte) * 89.050003, p = (4 byte) 2 điểm giới hạn hộp = * (HI = 4.000000/3.000000, LO = 2.000000,1.000000) * * */ #include <stdio.h #include "libpq-fe.h" #include "Utils/Geo-decls.h"/ * cho loại đa giác */ Vô hiệu exit_nicely (pgconn *Conn) Pqfinish (Conn); Thoát (1); chủ yếu() char *pghost, *PGPORT, *pgoptions, *pgtty; char *dbname; int nfields; int i, j; int i_fnum, d_fnum, p_fnum; Pgconn *Conn; Pgresult *kèo bóng đá euro; /* * Bắt đầu, bằng cách đặt các tham số cho kết nối phụ trợ nếu * tham số là null, sau đó hệ thống sẽ cố gắng sử dụng hợp lý * Mặc định bằng cách tìm kiếm các biến môi trường hoặc, không thành công, * Sử dụng các hằng số cứng */ pghost = null; / * tên máy chủ của máy chủ phụ trợ */ pgport = null; / * cổng của máy chủ phụ trợ */ pgOptions = null; /* Các tùy chọn đặc biệt để bắt đầu phần phụ trợ * máy chủ */ pgtty = null; / * gỡ lỗi tty cho máy chủ phụ trợ *// dbname = getenv ("người dùng"); /* Thay đổi cái này thành tên của bài kiểm tra của bạn * cơ sở dữ liệu */ / * Tạo kết nối với cơ sở dữ liệu */ Conn = pqsetDB (pghost, pgport, pgOptions, pgtty, dbname); /* * Kiểm tra xem kết nối phụ trợ đã được thực hiện thành công */ if (pqstatus (Conn) == Connection_bad) fprintf (stderr, "kết nối với cơ sở dữ liệu '%s' không thành công. \ n", dbname); fprintf (stderr, "%s", pqerrormessage (Conn)); exit_nicely (Conn); / * Bắt đầu một khối giao dịch */ kèo bóng đá euro = pqExec (Conn, "bắt đầu"); if (pqresultstatus (kèo bóng đá euro)! = pgres_command_ok) fprintf (stderr, "lệnh bắt đầu không thành công \ n"); PQCLEAR (kèo bóng đá euro); exit_nicely (Conn); /* * PQClear pgresult có nên không còn cần thiết để tránh * rò rỉ bộ nhớ */ PQCLEAR (kèo bóng đá euro); /* * Tìm nạp các trường hợp từ PG_DATABASE, Danh mục hệ thống của * Cơ sở dữ liệu */ kèo bóng đá euro = pqExec (Conn, "khai báo con trỏ nhị phân Mycursor cho Chọn * từ Test1"); if (pqresultstatus (kèo bóng đá euro)! = pgres_command_ok) fprintf (stderr, "lệnh con trỏ tuyên bố không thành công \ n"); PQCLEAR (kèo bóng đá euro); exit_nicely (Conn); PQCLEAR (kèo bóng đá euro); kèo bóng đá euro = pqExec (Conn, "tìm nạp tất cả trong mycursor"); if (pqresultstatus (kèo bóng đá euro)! = pgres_tuples_ok) fprintf (stderr, "tìm nạp tất cả các lệnh không trả lại các bộ dữ liệu đúng cách \ n"); PQCLEAR (kèo bóng đá euro); exit_nicely (Conn); i_fnum = pqfnumber (kèo bóng đá euro, "i"); d_fnum = pqfnumber (kèo bóng đá euro, "d"); p_fnum = pqfnumber (kèo bóng đá euro, "p"); for (i = 0; i <3; i ++) printf ("type [ %d] = %d, kích thước [ %d] = %d \ n", i, pqfttype (kèo bóng đá euro, i), i, pqfsize (kèo bóng đá euro, i)); for (i = 0; i <pqntuples (kèo bóng đá euro); i ++) int *ival; float *dval; int plen; Đa giác *pval; / * Chúng tôi khó kết nối điều này vào 3 trường mà chúng tôi biết về *// Ival = (int *) pqgetValue (kèo bóng đá euro, i, i_fnum); dval = (float *) pqgetValue (kèo bóng đá euro, i, d_fnum); plen = pQGetLpm (kèo bóng đá euro, i, p_fnum); /* * Plen không bao gồm trường chiều dài nên cần phải * Tăng bởi Varhdsz */ pval = (polygon *) malloc (plen + varhdrsz); pval- size = plen; memmove ((char *) & pval- npts, pqgetValue (kèo bóng đá euro, i, p_fnum), plen); printf ("tuple %d: got \ n", i); printf ("i = ( %d byte) %d, \ n", PQGetLpm (kèo bóng đá euro, i, i_fnum), *ival); printf ("d = ( %d byte) %f, \ n", PQGetLpm (kèo bóng đá euro, i, d_fnum), *dval); printf ("p = (%d byte)%d điểm \ tboundbox = (hi =%f/%f, lo =%f,%f) \ n", PQGetLpm (kèo bóng đá euro, i, d_fnum), pval- npts, pval- boundbox.xh, pval- boundbox.yh, pval- boundbox.xl, pval- boundbox.yl); PQCLEAR (kèo bóng đá euro); / * Đóng con trỏ */ kèo bóng đá euro = pQExec (Conn, "Đóng Mycursor"); PQCLEAR (kèo bóng đá euro); / * cam kết giao dịch */ kèo bóng đá euro = pqExec (Conn, "cam kết"); PQCLEAR (kèo bóng đá euro); / * Đóng kết nối với cơ sở dữ liệu và dọn dẹp */ Pqfinish (Conn);