/* * Test program for PQprepare/PQdescribe. * Abhijit Menon-Sen * * create table pqtest (a int, b text, c text); * insert into pqtest (a,b,c) values (1,'foo','bar'); * insert into pqtest (a,b,c) values (1,'foo','baz'); * insert into pqtest (a,b,c) values (2,'foo','barf'); */ #include #include #include #include "libpq-fe.h" int main(int argc, char *argv[]) { int i, a, b, c; PGconn *conn; PGresult *res; char *query = "select * from pqtest where a=$1 and b=$2"; const char *values[2]; conn = PQconnectdb(""); if (PQstatus(conn) != CONNECTION_OK) { fprintf(stderr, "Couldn't connect to the database: %s", PQerrorMessage(conn)); PQfinish(conn); exit(-1); } res = PQprepare(conn, "prep", query, 0, NULL); if (PQresultStatus(res) != PGRES_COMMAND_OK) { fprintf(stderr, "PREPARE failed: %s", PQerrorMessage(conn)); PQclear(res); PQfinish(conn); exit(-1); } PQclear(res); values[0] = "1"; values[1] = "foo"; res = PQexecPrepared(conn, "prep", 2, values, NULL, NULL, 0); if (PQresultStatus(res) != PGRES_TUPLES_OK) { fprintf(stderr, "EXECUTE failed: %s", PQerrorMessage(conn)); PQclear(res); PQfinish(conn); exit(-1); } a = PQfnumber(res, "a"); b = PQfnumber(res, "b"); c = PQfnumber(res, "c"); printf("Results:\n"); for(i = 0; i < PQntuples(res); i++) { char *av = PQgetvalue(res, i, a); char *bv = PQgetvalue(res, i, b); char *cv = PQgetvalue(res, i, c); printf(" (a=%s)(b=%s)(c=%s)\n", av, bv, cv); } printf("%d rows\n", i); PQclear(res); PQfinish(conn); return 0; }