src/evpq_test.c
changeset 12 7f159ee3a3ff
child 22 85ba190a9e68
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/evpq_test.c	Sat Oct 04 18:07:45 2008 +0300
@@ -0,0 +1,91 @@
+
+#include <stdio.h>
+
+#include "evpq.h"
+#include "lib/log.h"
+
+#define CONNINFO_DEFAULT "dbname=test"
+#define QUERY_DEFAULT "SELECT a, b FROM foo"
+
+void cb_connected (struct evpq_conn *conn, void *arg) {
+    INFO("[evpq_test] connected");
+
+    if (evpq_query(conn, QUERY_DEFAULT))
+        FATAL("evpq_query");
+}
+
+void cb_result (struct evpq_conn *conn, PGresult *result, void *arg) {
+
+    INFO("[evpq_test] result: %s", PQresStatus(PQresultStatus(result)));
+
+    // fatal error?
+    if (PQresultStatus(result) != PGRES_TUPLES_OK)
+        FATAL("error: %s", PQresultErrorMessage(result));
+    
+    // dump it to stdout
+    PQprintOpt popt = {
+        .header     = 1,
+        .align      = 1,
+        .standard   = 0,
+        .html3      = 0,
+        .expanded   = 1,
+        .pager      = 0,
+        .fieldSep   = "|",
+        .tableOpt   = NULL,
+        .caption    = NULL,
+        .fieldName  = NULL,
+    };
+
+    PQprint(stdout, result, &popt);
+
+    // don't care about the result anymore
+    PQclear(result);
+}
+
+void cb_done (struct evpq_conn *conn, void *arg) {
+    INFO("[evpq_test] done");
+}
+
+void cb_failure (struct evpq_conn *conn, void *arg) {
+    INFO("[evpq_test] failure");
+    INFO("\t%s", evpq_error_message(conn));
+    
+    FATAL("exiting");
+}
+
+int main (int argc, char **argv) {
+    struct event_base *ev_base = NULL;
+    struct evpq_conn *conn = NULL;
+    const char *conninfo = CONNINFO_DEFAULT;
+
+    struct evpq_callback_info cb_info = {
+        .fn_connected = cb_connected,
+        .fn_result = cb_result,
+        .fn_done = cb_done,
+        .fn_failure = cb_failure,
+
+        .cb_arg = NULL,
+    };
+
+    // initialize libevent
+    if ((ev_base = event_base_new()) == NULL)
+        ERROR("event_base_new");
+
+    // establish the evpq connection
+    if ((conn = evpq_connect(ev_base, conninfo, cb_info)) == NULL)
+        ERROR("evpq_connect");
+
+    // run libevent
+    INFO("running libevent loop");
+
+    if (event_base_dispatch(ev_base))
+        ERROR("event_base_dispatch");
+    
+    // clean shutdown
+
+error:
+    if (ev_base)
+        event_base_free(ev_base);
+}
+
+