src/evsql_test.c
author Tero Marttila <terom@fixme.fi>
Thu, 20 Nov 2008 01:16:24 +0200
branchnew-evsql
changeset 44 9e76ee9729b6
child 45 424ce5ab82fd
permissions -rw-r--r--
more work on the new evsql interface
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
#include <event2/event.h>
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
#include "evsql.h"
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
#include "lib/log.h"
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
#include "lib/signals.h"
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
#include "lib/misc.h"
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
#define CONNINFO_DEFAULT "dbname=dbfs port=5433"
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
void db_results (struct evsql_result *result, void *arg) {
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
    uint32_t val;
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
    static struct evsql_result_info result_info = {
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
        0, {
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
            {   EVSQL_FMT_BINARY,   EVSQL_TYPE_UINT32   },
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
            {   0,                  0                   }
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
        }
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
    };
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
}
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
void do_query (struct evsql *db) {
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
    struct evsql_query *query = NULL;
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
    static struct evsql_query_info query_info = {
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
        .sql    = "SELECT $1::int4 + 5",
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
        .params = {
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
            {   EVSQL_FMT_BINARY,   EVSQL_TYPE_UINT32   },
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
            {   0,                  0                   }
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
        }
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
    };
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
    // query
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
    assert((query = evsql_query_exec(db, NULL, &query_info, (uint32_t) 4, db_results, NULL)) != NULL);
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
}
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
int main (char argc, char **argv) {
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
    struct event_base *ev_base = NULL;
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
    struct signals *signals = NULL;
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
    struct evsql *db = NULL;
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
    const char *db_conninfo;
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
    
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    // parse args
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
    db_conninfo = CONNINFO_DEFAULT;
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
    
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
    // init libevent
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
    if ((ev_base = event_base_new()) == NULL)
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
        ERROR("event_base_new");
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
    
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
    // setup signals
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
    if ((signals = signals_default(ev_base)) == NULL)
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
        ERROR("signals_default");
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
    // setup evsql
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
    if ((db = evsql_new_pq(ev_base, db_conninfo, NULL, NULL)) == NULL)
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
        ERROR("evsql_new_pq");
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
    // run libevent
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
    INFO("running libevent loop");
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
    if (event_base_dispatch(ev_base))
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
        PERROR("event_base_dispatch");
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
    
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
    // clean shutdown
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
error :
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
    if (db) {
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
        /* evsql_close(db); */
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
    }
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
    if (signals)
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
        signals_free(signals);
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
    if (ev_base)
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
        event_base_free(ev_base);
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
    
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
}
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82