author | Tero Marttila <terom@fixme.fi> |
Sun, 12 Oct 2008 20:10:47 +0300 | |
changeset 25 | 99a41f48e29b |
child 26 | 61668c57f4bb |
permissions | -rw-r--r-- |
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 */ |