src/evsql_test.c
author Tero Marttila <terom@fixme.fi>
Wed, 01 May 2013 00:11:39 +0300
changeset 66 fdd7f995af6c
parent 61 9f7ecf7bf699
permissions -rw-r--r--
MIT license
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
61
9f7ecf7bf699 wrangle evsql_test to work
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    34
//  XXX: disabled as evperiod_assign has gone missing
9f7ecf7bf699 wrangle evsql_test to work
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    35
//    evperiodic_assign(&ev, base, &tv, &query_timer, db);
9f7ecf7bf699 wrangle evsql_test to work
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
    36
//    event_add(&ev, &tv);
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    37
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    38
    INFO("[evsql_test.timer_start] started timer");
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    39
}
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    40
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    41
void query_results (struct evsql_result *result, void *arg) {
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    42
    struct evsql *db = arg;
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
    uint32_t val;
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    45
    (void) db;
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    46
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    static struct evsql_result_info result_info = {
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
        0, {
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
            {   EVSQL_FMT_BINARY,   EVSQL_TYPE_UINT32   },
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
            {   0,                  0                   }
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
    };
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    54
    // begin
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    55
    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
    56
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    57
    // one row
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    58
    assert(evsql_result_next(result, 
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    59
        &val
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    60
    ) > 0);
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    61
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    62
    // print
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    63
    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
    64
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    65
    // done
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    66
    evsql_result_end(result);
44
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
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    69
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
    70
    struct evsql_query *query = NULL;
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    71
    static int query_id = 0;
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
    static struct evsql_query_info query_info = {
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
        .sql    = "SELECT $1::int4 + 5",
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
        .params = {
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
            {   EVSQL_FMT_BINARY,   EVSQL_TYPE_UINT32   },
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
            {   0,                  0                   }
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
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
    // query
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    83
    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
    84
        (uint32_t) ++query_id
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    85
    )) == NULL)
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    86
        WARNING("evsql_query_exec failed");
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    87
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
    88
    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
    89
}
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
47
8c6c459eacb7 fix evsql_trans_commit (null arg)
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
    91
void trans_commit (struct evsql_test_ctx *ctx) {
8c6c459eacb7 fix evsql_trans_commit (null arg)
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
    92
    if (evsql_trans_commit(ctx->trans))
8c6c459eacb7 fix evsql_trans_commit (null arg)
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
    93
        FATAL("evsql_trans_commit failed");
8c6c459eacb7 fix evsql_trans_commit (null arg)
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
    94
    
8c6c459eacb7 fix evsql_trans_commit (null arg)
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
    95
    INFO("[evsql_test.trans_commit] commiting transaction");
8c6c459eacb7 fix evsql_trans_commit (null arg)
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
    96
}
8c6c459eacb7 fix evsql_trans_commit (null arg)
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
    97
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    98
void trans_insert_result (struct evsql_result *res, void *arg) {
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
    99
    struct evsql_test_ctx *ctx = arg;
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   100
    err_t err;
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   101
    
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   102
    // the result info
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   103
    uint32_t id;
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   104
    const char *str;
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
    static struct evsql_result_info result_info = {
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   107
        0, {
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   108
            {   EVSQL_FMT_BINARY,   EVSQL_TYPE_UINT32   },
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   109
            {   EVSQL_FMT_BINARY,   EVSQL_TYPE_STRING   },
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   110
            {   0,                  0                   }
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
    };
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   113
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   114
    // begin
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   115
    if ((err = evsql_result_begin(&result_info, res)))
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   116
        EFATAL(err, "query failed%s", err == EIO ? evsql_result_error(res) : "");
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   117
    
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   118
    INFO("[evsql_test.insert] got %zu rows:", evsql_result_rows(res));
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
    // iterate over rows
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   121
    while ((err = evsql_result_next(res, &id, &str)) > 0) {
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   122
        INFO("\t%-4lu %s", (unsigned long) id, str);
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   123
    }
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
    if (err)
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   126
        EFATAL(err, "evsql_result_next failed");
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   127
    
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   128
    INFO("\t(done)");
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   129
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   130
    // done
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   131
    evsql_result_end(res);
47
8c6c459eacb7 fix evsql_trans_commit (null arg)
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
   132
8c6c459eacb7 fix evsql_trans_commit (null arg)
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
   133
    // commit the transaction
8c6c459eacb7 fix evsql_trans_commit (null arg)
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
   134
    trans_commit(ctx);
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   135
}
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   136
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   137
void trans_insert (struct evsql_test_ctx *ctx) {
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   138
    struct evsql_query *query = NULL;
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
    // the query info
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   141
    static struct evsql_query_info query_info = {
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   142
        .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
   143
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   144
        .params = {
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   145
            {   EVSQL_FMT_BINARY,   EVSQL_TYPE_STRING   },
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   146
            {   EVSQL_FMT_BINARY,   EVSQL_TYPE_STRING   },
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   147
            {   0,                  0                   }
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   148
        }
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   149
    };
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   150
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   151
    // run the query
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   152
    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
   153
        (const char *) "row A",
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   154
        (const char *) "row B"
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   155
    )) != NULL);
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   156
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   157
    INFO("[evsql_test.insert] enqueued query: %p", query);
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   158
}
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   159
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   160
void trans_create_result (struct evsql_result *res, void *arg) {
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   161
    struct evsql_test_ctx *ctx = arg;
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   162
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   163
    // check
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   164
    if (evsql_result_check(res))
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   165
        FATAL("query failed: %s", evsql_result_error(res));
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   166
    
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   167
    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
   168
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   169
    // free result
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   170
    evsql_result_free(res);
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   171
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   172
    // insert
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   173
    trans_insert(ctx);
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   174
}
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   175
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   176
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
   177
    struct evsql_query *query = NULL;
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   178
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   179
    // the query info
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   180
    static struct evsql_query_info query_info = {
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   181
        .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
   182
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   183
        .params = {
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   184
//            {   EVSQL_FMT_BINARY,   EVSQL_TYPE_STRING   },
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   185
            {   0,                  0,                  }
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   186
        }
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   187
    };
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
    // run the query
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   190
    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
   191
//        (const char *) "foobar"
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   192
    )) != NULL);
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   193
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   194
    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
   195
}
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   196
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   197
void trans_error (struct evsql_trans *trans, void *arg) {
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   198
    struct evsql_test_ctx *ctx = arg;
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   199
47
8c6c459eacb7 fix evsql_trans_commit (null arg)
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
   200
    FATAL("[evsql_test.trans_error] failure: trans=%p: %s", ctx->trans, evsql_trans_error(trans));
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   201
}
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
void trans_ready (struct evsql_trans *trans, void *arg) {
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   204
    struct evsql_test_ctx *ctx = arg;
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   205
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   206
    INFO("[evsql_test.trans_ready] ready");
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   207
    
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   208
    trans_create_query(ctx);
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   209
}
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   210
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   211
void trans_done (struct evsql_trans *trans, void *arg) {
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   212
    struct evsql_test_ctx *ctx = arg;
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   213
47
8c6c459eacb7 fix evsql_trans_commit (null arg)
Tero Marttila <terom@fixme.fi>
parents: 46
diff changeset
   214
    INFO("[evsql_test.trans_done] done: trans=%p", ctx->trans);
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   215
}
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   216
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   217
void begin_transaction (struct evsql_test_ctx *ctx) {
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   218
    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
   219
        &trans_error, &trans_ready, &trans_done,
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   220
        ctx
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   221
    )) != NULL);
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   222
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   223
    INFO("[evsql_test.begin_trans] created transaction");
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   224
 }
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   225
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   226
int main (int argc, char **argv) {
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   227
    struct evsql_test_ctx ctx;
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   228
    struct event_base *ev_base = NULL;
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   229
    struct signals *signals = NULL;
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   230
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   231
    const char *db_conninfo;
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
    // parse args
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   234
    db_conninfo = CONNINFO_DEFAULT;
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   235
    
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   236
    // init libevent
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   237
    if ((ev_base = event_base_new()) == NULL)
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   238
        ERROR("event_base_new");
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   239
    
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   240
    // setup signals
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   241
    if ((signals = signals_default(ev_base)) == NULL)
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   242
        ERROR("signals_default");
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   243
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   244
    // setup evsql
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   245
    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
   246
        ERROR("evsql_new_pq");
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   247
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   248
    // send query
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   249
    query_send(ctx.db, NULL);
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   250
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   251
    // being transaction
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   252
    begin_transaction(&ctx);
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   253
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   254
    // send query
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   255
    query_send(ctx.db, NULL);
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   256
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   257
    // start query timer
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   258
    query_start(ev_base, ctx.db);
45
424ce5ab82fd compiles + some basic evsql_test
Tero Marttila <terom@fixme.fi>
parents: 44
diff changeset
   259
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   260
    // run libevent
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   261
    INFO("[evsql_test.main] running libevent loop");
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   262
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   263
    if (event_base_dispatch(ev_base))
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   264
        PERROR("event_base_dispatch");
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   265
    
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   266
    // clean shutdown
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
error :
46
75cecfc4603b moar testing
Tero Marttila <terom@fixme.fi>
parents: 45
diff changeset
   269
    if (ctx.db) {
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   270
        /* evsql_close(db); */
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   271
    }
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   272
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   273
    if (signals)
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   274
        signals_free(signals);
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   275
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   276
    if (ev_base)
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   277
        event_base_free(ev_base);
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   278
    
61
9f7ecf7bf699 wrangle evsql_test to work
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   279
    // XXX: err
9f7ecf7bf699 wrangle evsql_test to work
Tero Marttila <terom@fixme.fi>
parents: 47
diff changeset
   280
    return 0;    
44
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   281
}
9e76ee9729b6 more work on the new evsql interface
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   282