#include #include #include "libpq-fe.h" static void exit_nicely(PGconn *conn) { PQfinish(conn); exit(1); } void check_error(PGconn *conn, PGresult *res, ExecStatusType rc, char *msg) { if (PQresultStatus(res) != rc) { /* fprintf(stderr, msg, PQerrorMessage(conn)); */ fprintf(stderr, "%s: %s\n", msg, PQerrorMessage(conn)); PQclear(res); exit_nicely(conn); } } char* manyRows = " \ select 1 from \ ( select 1 from tdual union select 0 from tdual) t1 \ , ( select 2 from tdual union select 0 from tdual) t2 \ , ( select 3 from tdual union select 0 from tdual) t3 \ , ( select 4 from tdual union select 0 from tdual) t4 \ , ( select 5 from tdual union select 0 from tdual) t5 \ , ( select 6 from tdual union select 0 from tdual) t6 \ , ( select 7 from tdual union select 0 from tdual) t7 \ , ( select 8 from tdual union select 0 from tdual) t8 \ , ( select 9 from tdual union select 0 from tdual) t9 \ , ( select 10 from tdual union select 0 from tdual) t10 \ , ( select 11 from tdual union select 0 from tdual) t11 \ , ( select 12 from tdual union select 0 from tdual) t12 \ , ( select 13 from tdual union select 0 from tdual) t13 \ , ( select 14 from tdual union select 0 from tdual) t14 \ , ( select 15 from tdual union select 0 from tdual) t15 \ , ( select 16 from tdual union select 0 from tdual) t16 \ "; char* manyRows2 = " \ select 1 from \ ( select 1 union select 0) t1 \ , ( select 2 union select 0) t2 \ , ( select 3 union select 0) t3 \ , ( select 4 union select 0) t4 \ , ( select 5 union select 0) t5 \ , ( select 6 union select 0) t6 \ , ( select 7 union select 0) t7 \ , ( select 8 union select 0) t8 \ , ( select 9 union select 0) t9 \ , ( select 10 union select 0) t10 \ , ( select 11 union select 0) t11 \ , ( select 12 union select 0) t12 \ , ( select 13 union select 0) t13 \ , ( select 14 union select 0) t14 \ , ( select 15 union select 0) t15 \ , ( select 16 union select 0) t16 \ "; int main(int argc, char **argv) { const char *conninfo; PGconn *conn; PGresult *res; int nFields; int i, j; Oid paramTypes[10]; /* * If the user supplies a parameter on the command line, use it as the * conninfo string; otherwise default to setting dbname=postgres and using * environment variables or defaults for all other connection parameters. */ if (argc > 1) conninfo = argv[1]; else conninfo = "user=postgres"; /* Make a connection to the database */ conn = PQconnectdb(conninfo); /* Check to see that the backend connection was successfully made */ if (PQstatus(conn) != CONNECTION_OK) { fprintf(stderr, "Connection to database failed: %s" , PQerrorMessage(conn)); exit_nicely(conn); } res = PQexec(conn, manyRows2); check_error(conn, res, PGRES_TUPLES_OK, "FETCH ALL failed"); printf("start query\n"); /* next, print out the rows */ for (i = 0; i < PQntuples(res); i++) { j = (int) PQgetvalue(res, i, 0); } printf("rowcount: %d\n", PQntuples(res)); PQclear(res); /* close the connection to the database and cleanup */ PQfinish(conn); return 0; }