terom@12: terom@12: #include terom@12: terom@12: #include "evpq.h" terom@12: #include "lib/log.h" terom@12: terom@12: #define CONNINFO_DEFAULT "dbname=test" terom@12: #define QUERY_DEFAULT "SELECT a, b FROM foo" terom@12: terom@12: void cb_connected (struct evpq_conn *conn, void *arg) { terom@12: INFO("[evpq_test] connected"); terom@12: terom@12: if (evpq_query(conn, QUERY_DEFAULT)) terom@12: FATAL("evpq_query"); terom@12: } terom@12: terom@12: void cb_result (struct evpq_conn *conn, PGresult *result, void *arg) { terom@12: terom@12: INFO("[evpq_test] result: %s", PQresStatus(PQresultStatus(result))); terom@12: terom@12: // fatal error? terom@12: if (PQresultStatus(result) != PGRES_TUPLES_OK) terom@12: FATAL("error: %s", PQresultErrorMessage(result)); terom@12: terom@12: // dump it to stdout terom@12: PQprintOpt popt = { terom@12: .header = 1, terom@12: .align = 1, terom@12: .standard = 0, terom@12: .html3 = 0, terom@12: .expanded = 1, terom@12: .pager = 0, terom@12: .fieldSep = "|", terom@12: .tableOpt = NULL, terom@12: .caption = NULL, terom@12: .fieldName = NULL, terom@12: }; terom@12: terom@12: PQprint(stdout, result, &popt); terom@12: terom@12: // don't care about the result anymore terom@12: PQclear(result); terom@12: } terom@12: terom@12: void cb_done (struct evpq_conn *conn, void *arg) { terom@12: INFO("[evpq_test] done"); terom@12: } terom@12: terom@12: void cb_failure (struct evpq_conn *conn, void *arg) { terom@12: INFO("[evpq_test] failure"); terom@12: INFO("\t%s", evpq_error_message(conn)); terom@12: terom@12: FATAL("exiting"); terom@12: } terom@12: terom@12: int main (int argc, char **argv) { terom@12: struct event_base *ev_base = NULL; terom@12: struct evpq_conn *conn = NULL; terom@12: const char *conninfo = CONNINFO_DEFAULT; terom@12: terom@12: struct evpq_callback_info cb_info = { terom@12: .fn_connected = cb_connected, terom@12: .fn_result = cb_result, terom@12: .fn_done = cb_done, terom@12: .fn_failure = cb_failure, terom@12: }; terom@12: terom@12: // initialize libevent terom@12: if ((ev_base = event_base_new()) == NULL) terom@12: ERROR("event_base_new"); terom@12: terom@12: // establish the evpq connection terom@22: if ((conn = evpq_connect(ev_base, conninfo, cb_info, NULL)) == NULL) terom@12: ERROR("evpq_connect"); terom@12: terom@12: // run libevent terom@12: INFO("running libevent loop"); terom@12: terom@12: if (event_base_dispatch(ev_base)) terom@12: ERROR("event_base_dispatch"); terom@12: terom@12: // clean shutdown terom@12: terom@12: error: terom@12: if (ev_base) terom@12: event_base_free(ev_base); terom@12: } terom@12: terom@12: