src/evsql_internal.h
author Tero Marttila <terom@fixme.fi>
Sun, 12 Oct 2008 20:10:47 +0300
changeset 25 99a41f48e29b
child 26 61668c57f4bb
permissions -rw-r--r--
evsql transactions, it compiles...
25
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#ifndef EVSQL_INTERNAL_H
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
#define EVSQL_INTERNAL_H
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
#include <sys/queue.h>
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
#include "evsql.h"
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
/*
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
 * The engine type
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
 */
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
enum evsql_type {
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
    EVSQL_EVPQ,     // evpq
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
};
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
/*
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
 * Contains the type, engine configuration, list of connections and waiting query queue.
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
 */
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
struct evsql {
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
    // what event_base to use
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
    struct event_base *ev_base;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
    // what engine we use
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
    enum evsql_type type;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
    // callbacks
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
    evsql_error_cb error_fn;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
    void *cb_arg;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
    
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
    // engine-specific connection configuration
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
    union {
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
        const char *evpq;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    } engine_conf;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
    // list of connections that are open
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
    LIST_HEAD(evsql_conn_list, evsql_conn) conn_list;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
   
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
    // list of queries running or waiting to run
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
    TAILQ_HEAD(evsql_query_queue, evsql_query) query_queue;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
};
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    40
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
/*
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
 * A single connection to the server.
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    43
 *
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
 * Contains the engine connection, may have a transaction associated, and may have a query associated.
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
 */
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
struct evsql_conn {
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
    // evsql we belong to
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
    struct evsql *evsql;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
    // engine-specific connection info
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
    union {
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
        struct evpq_conn *evpq;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
    } engine;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
    // our position in the conn list
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
    LIST_ENTRY(evsql_conn) entry;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
    // are we running a transaction?
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
    struct evsql_trans *trans;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
    // are we running a transactionless query?
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
    struct evsql_query *query;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    63
};
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    64
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    65
/*
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    66
 * A single transaction.
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    67
 *
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    68
 * Has a connection associated and possibly a query (which will also be associated with the connection)
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
 */
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
struct evsql_trans {
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
    // our evsql_conn/evsql
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
    //struct evsql *evsql;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
    struct evsql_conn *conn;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
    
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
    // callbacks
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
    evsql_trans_error_cb error_fn;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
    evsql_trans_ready_cb ready_fn;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
    void *cb_arg;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
    // the transaction type
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
    enum evsql_trans_type type;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
    // our current query
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
    struct evsql_query *query;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
};
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
/*
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    89
 * A single query.
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    90
 *
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
 * Has the info needed to exec the query (as these may be queued), and the callback/result info.
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
 */
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
struct evsql_query {
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
    // the actual SQL query, this may or may not be ours, see _evsql_query_exec
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
    char *command;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
    
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    97
    // possible query params
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
    struct evsql_query_param_info {
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
        int count;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   100
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
        Oid *types;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
        const char **values;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   103
        int *lengths;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
        int *formats;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   105
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   106
        int result_format;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   107
    } params;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   108
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   109
    // our callback
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   110
    evsql_query_cb cb_fn;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   111
    void *cb_arg;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   112
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   113
    // our position in the query list
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   114
    TAILQ_ENTRY(evsql_query) entry;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   115
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   116
    // the result
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   117
    union {
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   118
        PGresult *evpq;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   119
    } result;
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   120
};
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   121
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   122
// maximum length for a 'BEGIN TRANSACTION ...' query
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   123
#define EVSQL_QUERY_BEGIN_BUF 512
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   124
99a41f48e29b evsql transactions, it compiles...
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
#endif /* EVSQL_INTERNAL_H */