src/evsql_test.c
author Tero Marttila <terom@fixme.fi>
Sat, 29 Nov 2008 00:39:47 +0200
branchnew-evsql
changeset 46 75cecfc4603b
parent 45 424ce5ab82fd
child 47 8c6c459eacb7
permissions -rw-r--r--
moar testing
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 "evsql.h"
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
#include "lib/log.h"
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
#include "lib/signals.h"
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
#include "lib/misc.h"
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
     7
#include <event2/event.h>
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
     8
#include <event2/event_struct.h>
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
     9
#include <assert.h>
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    10
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
#define CONNINFO_DEFAULT "dbname=dbfs port=5433"
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    13
struct evsql_test_ctx {
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    14
    struct evsql *db;
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    15
    struct evsql_trans *trans;
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    16
};
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    17
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    18
// forward-declare
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    19
void query_send (struct evsql *db, struct evsql_trans *trans);
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    20
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    21
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    22
void query_timer (int fd, short what, void *arg) {
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    23
    struct evsql *db = arg;
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    24
    
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    25
    INFO("[evsql_test.timer] *tick*");
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    26
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    27
    query_send(db, NULL);
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    28
}
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    29
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    30
void query_start (struct event_base *base, struct evsql *db) {
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    31
    static struct event ev;
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    32
    struct timeval tv = { 5, 0 };
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    33
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    34
    evperiodic_assign(&ev, base, &tv, &query_timer, db);
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    35
    event_add(&ev, &tv);
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    36
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    37
    INFO("[evsql_test.timer_start] started timer");
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    38
}
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    39
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    40
void query_results (struct evsql_result *result, void *arg) {
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    41
    struct evsql *db = arg;
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
    uint32_t val;
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    44
    (void) db;
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    45
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
    static struct evsql_result_info result_info = {
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
        0, {
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
            {   EVSQL_FMT_BINARY,   EVSQL_TYPE_UINT32   },
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
            {   0,                  0                   }
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
        }
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
    };
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    53
    // begin
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    54
    assert(evsql_result_begin(&result_info, result) == 0);
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    56
    // one row
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    57
    assert(evsql_result_next(result, 
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    58
        &val
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    59
    ) > 0);
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    60
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    61
    // print
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    62
    INFO("[evsql_test.results] got result: %p: val=%lu", result, (unsigned long) val);
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    63
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    64
    // done
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    65
    evsql_result_end(result);
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
}
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    68
void query_send (struct evsql *db, struct evsql_trans *trans) {
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
    struct evsql_query *query = NULL;
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    70
    static int query_id = 0;
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
    static struct evsql_query_info query_info = {
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
        .sql    = "SELECT $1::int4 + 5",
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
        .params = {
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
            {   EVSQL_FMT_BINARY,   EVSQL_TYPE_UINT32   },
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
            {   0,                  0                   }
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
        }
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
    };
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
    // query
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    82
    if ((query = evsql_query_exec(db, trans, &query_info, query_results, db,
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    83
        (uint32_t) ++query_id
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    84
    )) == NULL)
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    85
        WARNING("evsql_query_exec failed");
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    86
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    87
    INFO("[evsql_test.query_send] enqueued query, trans=%p: %p: %d", trans, query, query_id);
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
}
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    90
void trans_insert_result (struct evsql_result *res, void *arg) {
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    91
    struct evsql_test_ctx *ctx = arg;
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    92
    err_t err;
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    93
    
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    94
    // the result info
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    95
    uint32_t id;
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    96
    const char *str;
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    97
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    98
    static struct evsql_result_info result_info = {
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    99
        0, {
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   100
            {   EVSQL_FMT_BINARY,   EVSQL_TYPE_UINT32   },
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   101
            {   EVSQL_FMT_BINARY,   EVSQL_TYPE_STRING   },
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   102
            {   0,                  0                   }
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   103
        }
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   104
    };
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   105
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   106
    // begin
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   107
    if ((err = evsql_result_begin(&result_info, res)))
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   108
        EFATAL(err, "query failed%s", err == EIO ? evsql_result_error(res) : "");
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   109
    
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   110
    INFO("[evsql_test.insert] got %zu rows:", evsql_result_rows(res));
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   111
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   112
    // iterate over rows
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   113
    while ((err = evsql_result_next(res, &id, &str)) > 0) {
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   114
        INFO("\t%-4lu %s", (unsigned long) id, str);
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   115
    }
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   116
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   117
    if (err)
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   118
        EFATAL(err, "evsql_result_next failed");
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   119
    
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   120
    INFO("\t(done)");
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   121
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   122
    // done
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   123
    evsql_result_end(res);
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   124
}
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   125
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   126
void trans_insert (struct evsql_test_ctx *ctx) {
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   127
    struct evsql_query *query = NULL;
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   128
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   129
    // the query info
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   130
    static struct evsql_query_info query_info = {
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   131
        .sql    = "INSERT INTO evsql_test (str) VALUES ($1::varchar), ($2::varchar) RETURNING id, str",
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   132
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   133
        .params = {
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   134
            {   EVSQL_FMT_BINARY,   EVSQL_TYPE_STRING   },
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   135
            {   EVSQL_FMT_BINARY,   EVSQL_TYPE_STRING   },
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   136
            {   0,                  0                   }
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   137
        }
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   138
    };
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   139
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   140
    // run the query
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   141
    assert((query = evsql_query_exec(ctx->db, ctx->trans, &query_info, trans_insert_result, ctx,
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   142
        (const char *) "row A",
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   143
        (const char *) "row B"
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   144
    )) != NULL);
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   145
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   146
    INFO("[evsql_test.insert] enqueued query: %p", query);
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   147
}
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   148
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   149
void trans_create_result (struct evsql_result *res, void *arg) {
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   150
    struct evsql_test_ctx *ctx = arg;
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   151
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   152
    // check
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   153
    if (evsql_result_check(res))
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   154
        FATAL("query failed: %s", evsql_result_error(res));
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   155
    
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   156
    INFO("[evsql_test.create_result] table created succesfully: %p", res);
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   157
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   158
    // free result
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   159
    evsql_result_free(res);
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   160
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   161
    // insert
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   162
    trans_insert(ctx);
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   163
}
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   164
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   165
void trans_create_query (struct evsql_test_ctx *ctx) {
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   166
    struct evsql_query *query = NULL;
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   167
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   168
    // the query info
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   169
    static struct evsql_query_info query_info = {
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   170
        .sql    = "CREATE TEMPORARY TABLE evsql_test ( id serial4, str varchar(32) DEFAULT 'foobar' ) ON COMMIT DROP",
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   171
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   172
        .params = {
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   173
//            {   EVSQL_FMT_BINARY,   EVSQL_TYPE_STRING   },
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   174
            {   0,                  0,                  }
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   175
        }
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   176
    };
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   177
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   178
    // run the query
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   179
    assert((query = evsql_query_exec(ctx->db, ctx->trans, &query_info, trans_create_result, ctx
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   180
//        (const char *) "foobar"
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   181
    )) != NULL);
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   182
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   183
    INFO("[evsql_test.trans_create_query] enqueued query: %p", query);
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   184
}
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   185
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   186
void trans_error (struct evsql_trans *trans, void *arg) {
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   187
    struct evsql_test_ctx *ctx = arg;
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   188
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   189
    FATAL("[evsql_test.trans_error] failure: %s", evsql_trans_error(trans));
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   190
}
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   191
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   192
void trans_ready (struct evsql_trans *trans, void *arg) {
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   193
    struct evsql_test_ctx *ctx = arg;
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   194
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   195
    INFO("[evsql_test.trans_ready] ready");
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   196
    
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   197
    trans_create_query(ctx);
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   198
}
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   199
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   200
void trans_done (struct evsql_trans *trans, void *arg) {
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   201
    struct evsql_test_ctx *ctx = arg;
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   202
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   203
    INFO("[evsql_test.trans_done] done");
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   204
}
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   205
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   206
void begin_transaction (struct evsql_test_ctx *ctx) {
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   207
    assert((ctx->trans = evsql_trans(ctx->db, EVSQL_TRANS_DEFAULT, 
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   208
        &trans_error, &trans_ready, &trans_done,
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   209
        ctx
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   210
    )) != NULL);
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   211
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   212
    INFO("[evsql_test.begin_trans] created transaction");
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   213
 }
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   214
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   215
int main (int argc, char **argv) {
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   216
    struct evsql_test_ctx ctx;
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   217
    struct event_base *ev_base = NULL;
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   218
    struct signals *signals = NULL;
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   219
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   220
    const char *db_conninfo;
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   221
    
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   222
    // parse args
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   223
    db_conninfo = CONNINFO_DEFAULT;
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   224
    
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   225
    // init libevent
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   226
    if ((ev_base = event_base_new()) == NULL)
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   227
        ERROR("event_base_new");
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   228
    
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   229
    // setup signals
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   230
    if ((signals = signals_default(ev_base)) == NULL)
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   231
        ERROR("signals_default");
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   232
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   233
    // setup evsql
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   234
    if ((ctx.db = evsql_new_pq(ev_base, db_conninfo, NULL, NULL)) == NULL)
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   235
        ERROR("evsql_new_pq");
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   236
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   237
    // send query
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   238
    query_send(ctx.db, NULL);
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   239
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   240
    // being transaction
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   241
    begin_transaction(&ctx);
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   242
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   243
    // send query
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   244
    query_send(ctx.db, NULL);
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   245
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   246
    // start query timer
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   247
    query_start(ev_base, ctx.db);
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   248
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   249
    // run libevent
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   250
    INFO("[evsql_test.main] running libevent loop");
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   251
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   252
    if (event_base_dispatch(ev_base))
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   253
        PERROR("event_base_dispatch");
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   254
    
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   255
    // clean shutdown
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   256
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   257
error :
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   258
    if (ctx.db) {
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   259
        /* evsql_close(db); */
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   260
    }
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   261
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   262
    if (signals)
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   263
        signals_free(signals);
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   264
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   265
    if (ev_base)
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   266
        event_base_free(ev_base);
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   267
    
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   268
}
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   269