Mercurial > dovecot > core-2.2
annotate src/lib-sql/sql-api-private.h @ 23017:c1d36f2575c7 default tip
lib-imap: Fix "Don't accept strings with NULs" cherry-pick
author | Timo Sirainen <timo.sirainen@open-xchange.com> |
---|---|
date | Thu, 29 Aug 2019 09:55:25 +0300 |
parents | 7d189977dfe3 |
children |
rev | line source |
---|---|
6410
e4eb71ae8e96
Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents:
5496
diff
changeset
|
1 #ifndef SQL_API_PRIVATE_H |
e4eb71ae8e96
Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents:
5496
diff
changeset
|
2 #define SQL_API_PRIVATE_H |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
3 |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
4 #include "sql-api.h" |
6474
46c3e1ee196f
Added module_contexts to struct sql_db.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
5 #include "module-context.h" |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
6 |
11261
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
7 enum sql_db_state { |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
8 /* not connected to database */ |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
9 SQL_DB_STATE_DISCONNECTED, |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
10 /* waiting for connection attempt to succeed or fail */ |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
11 SQL_DB_STATE_CONNECTING, |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
12 /* connected, allowing more queries */ |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
13 SQL_DB_STATE_IDLE, |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
14 /* connected, no more queries allowed */ |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
15 SQL_DB_STATE_BUSY |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
16 }; |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
17 |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
18 /* Minimum delay between reconnecting to same server */ |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
19 #define SQL_CONNECT_MIN_DELAY 1 |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
20 /* Maximum time to avoiding reconnecting to same server */ |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
21 #define SQL_CONNECT_MAX_DELAY (60*30) |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
22 /* If no servers are connected but a query is requested, try reconnecting to |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
23 next server which has been disconnected longer than this (with a single |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
24 server setup this is really the "max delay" and the SQL_CONNECT_MAX_DELAY |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
25 is never used). */ |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
26 #define SQL_CONNECT_RESET_DELAY 15 |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
27 /* Abort connect() if it can't connect within this time. */ |
13495
20a901f1de31
lib-sql: Dropped connect timeout to 5 seconds.
Timo Sirainen <tss@iki.fi>
parents:
11407
diff
changeset
|
28 #define SQL_CONNECT_TIMEOUT_SECS 5 |
11261
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
29 /* Abort queries after this many seconds */ |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
30 #define SQL_QUERY_TIMEOUT_SECS 60 |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
31 /* Default max. number of connections to create per host */ |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
32 #define SQL_DEFAULT_CONNECTION_LIMIT 5 |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
33 |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
34 #define SQL_DB_IS_READY(db) \ |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
35 ((db)->state == SQL_DB_STATE_IDLE) |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
36 #define SQL_ERRSTR_NOT_CONNECTED "Not connected to database" |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
37 |
6474
46c3e1ee196f
Added module_contexts to struct sql_db.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
38 struct sql_db_module_register { |
46c3e1ee196f
Added module_contexts to struct sql_db.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
39 unsigned int id; |
46c3e1ee196f
Added module_contexts to struct sql_db.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
40 }; |
3736
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
41 |
6474
46c3e1ee196f
Added module_contexts to struct sql_db.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
42 union sql_db_module_context { |
46c3e1ee196f
Added module_contexts to struct sql_db.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
43 struct sql_db_module_register *reg; |
46c3e1ee196f
Added module_contexts to struct sql_db.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
44 }; |
46c3e1ee196f
Added module_contexts to struct sql_db.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
45 |
46c3e1ee196f
Added module_contexts to struct sql_db.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
46 extern struct sql_db_module_register sql_db_module_register; |
46c3e1ee196f
Added module_contexts to struct sql_db.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
47 |
11261
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
48 struct sql_transaction_query { |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
49 struct sql_transaction_query *next; |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
50 struct sql_transaction_context *trans; |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
51 |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
52 const char *query; |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
53 unsigned int *affected_rows; |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
54 }; |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
55 |
6474
46c3e1ee196f
Added module_contexts to struct sql_db.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
56 struct sql_db_vfuncs { |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
57 struct sql_db *(*init)(const char *connect_string); |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
58 void (*deinit)(struct sql_db *db); |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
59 |
11261
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
60 int (*connect)(struct sql_db *db); |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
61 void (*disconnect)(struct sql_db *db); |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
62 const char *(*escape_string)(struct sql_db *db, const char *string); |
3162
5d6787582410
Added sql_get_flags() function, currently returning only
Timo Sirainen <tss@iki.fi>
parents:
2754
diff
changeset
|
63 |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
64 void (*exec)(struct sql_db *db, const char *query); |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
65 void (*query)(struct sql_db *db, const char *query, |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
66 sql_query_callback_t *callback, void *context); |
3736
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
67 struct sql_result *(*query_s)(struct sql_db *db, const char *query); |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
68 |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
69 struct sql_transaction_context *(*transaction_begin)(struct sql_db *db); |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
70 void (*transaction_commit)(struct sql_transaction_context *ctx, |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
71 sql_commit_callback_t *callback, |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
72 void *context); |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
73 int (*transaction_commit_s)(struct sql_transaction_context *ctx, |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
74 const char **error_r); |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
75 void (*transaction_rollback)(struct sql_transaction_context *ctx); |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
76 |
9888
551c273f4844
lib-sql: Added sql_update_get_rows().
Timo Sirainen <tss@iki.fi>
parents:
9270
diff
changeset
|
77 void (*update)(struct sql_transaction_context *ctx, const char *query, |
551c273f4844
lib-sql: Added sql_update_get_rows().
Timo Sirainen <tss@iki.fi>
parents:
9270
diff
changeset
|
78 unsigned int *affected_rows); |
19072
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
14920
diff
changeset
|
79 const char *(*escape_blob)(struct sql_db *db, |
113f4e32cb19
lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents:
14920
diff
changeset
|
80 const unsigned char *data, size_t size); |
20528
b885fee56a82
lib-sql: Added sql_transaction_commit2()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20526
diff
changeset
|
81 void (*transaction_commit2)(struct sql_transaction_context *ctx, |
b885fee56a82
lib-sql: Added sql_transaction_commit2()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20526
diff
changeset
|
82 sql_commit2_callback_t *callback, |
b885fee56a82
lib-sql: Added sql_transaction_commit2()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20526
diff
changeset
|
83 void *context); |
22514
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
84 |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
85 struct sql_prepared_statement * |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
86 (*prepared_statement_init)(struct sql_db *db, |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
87 const char *query_template); |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
88 void (*prepared_statement_deinit)(struct sql_prepared_statement *prep_stmt); |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
89 |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
90 |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
91 struct sql_statement * |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
92 (*statement_init)(struct sql_db *db, const char *query_template); |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
93 struct sql_statement * |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
94 (*statement_init_prepared)(struct sql_prepared_statement *prep_stmt); |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
95 void (*statement_abort)(struct sql_statement *stmt); |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
96 void (*statement_set_timestamp)(struct sql_statement *stmt, |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
97 const struct timespec *ts); |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
98 void (*statement_bind_str)(struct sql_statement *stmt, |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
99 unsigned int column_idx, const char *value); |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
100 void (*statement_bind_binary)(struct sql_statement *stmt, |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
101 unsigned int column_idx, const void *value, |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
102 size_t value_size); |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
103 void (*statement_bind_int64)(struct sql_statement *stmt, |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
104 unsigned int column_idx, int64_t value); |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
105 void (*statement_query)(struct sql_statement *stmt, |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
106 sql_query_callback_t *callback, void *context); |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
107 struct sql_result *(*statement_query_s)(struct sql_statement *stmt); |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
108 void (*update_stmt)(struct sql_transaction_context *ctx, |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
109 struct sql_statement *stmt, |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
110 unsigned int *affected_rows); |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
111 }; |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
112 |
6474
46c3e1ee196f
Added module_contexts to struct sql_db.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
113 struct sql_db { |
46c3e1ee196f
Added module_contexts to struct sql_db.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
114 const char *name; |
11261
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
115 enum sql_db_flags flags; |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
116 |
6474
46c3e1ee196f
Added module_contexts to struct sql_db.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
117 struct sql_db_vfuncs v; |
14920
a097ef0a9d6d
Array API changed: ARRAY_DEFINE(name, type) -> ARRAY(type) name
Timo Sirainen <tss@iki.fi>
parents:
13495
diff
changeset
|
118 ARRAY(union sql_db_module_context *) module_contexts; |
11261
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
119 |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
120 void (*state_change_callback)(struct sql_db *db, |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
121 enum sql_db_state prev_state, |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
122 void *context); |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
123 void *state_change_context; |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
124 |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
125 enum sql_db_state state; |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
126 /* last time we started connecting to this server |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
127 (which may or may not have succeeded) */ |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
128 time_t last_connect_try; |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
129 unsigned int connect_delay; |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
130 unsigned int connect_failure_count; |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
131 struct timeout *to_reconnect; |
11407
f9e5c73a988b
lib-sql: Don't try to reconnect on deinit or intentional disconnect. Fixes a timeout leak.
Timo Sirainen <tss@iki.fi>
parents:
11261
diff
changeset
|
132 |
f9e5c73a988b
lib-sql: Don't try to reconnect on deinit or intentional disconnect. Fixes a timeout leak.
Timo Sirainen <tss@iki.fi>
parents:
11261
diff
changeset
|
133 unsigned int no_reconnect:1; |
6474
46c3e1ee196f
Added module_contexts to struct sql_db.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
134 }; |
46c3e1ee196f
Added module_contexts to struct sql_db.
Timo Sirainen <tss@iki.fi>
parents:
6410
diff
changeset
|
135 |
5496
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
136 struct sql_result_vfuncs { |
3736
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
137 void (*free)(struct sql_result *result); |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
138 int (*next_row)(struct sql_result *result); |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
139 |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
140 unsigned int (*get_fields_count)(struct sql_result *result); |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
141 const char *(*get_field_name)(struct sql_result *result, |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
142 unsigned int idx); |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
143 int (*find_field)(struct sql_result *result, const char *field_name); |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
144 |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
145 const char *(*get_field_value)(struct sql_result *result, |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
146 unsigned int idx); |
5496
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
147 const unsigned char * |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
148 (*get_field_value_binary)(struct sql_result *result, |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
149 unsigned int idx, |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
150 size_t *size_r); |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
151 const char *(*find_field_value)(struct sql_result *result, |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
152 const char *field_name); |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
153 const char *const *(*get_values)(struct sql_result *result); |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
154 |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
155 const char *(*get_error)(struct sql_result *result); |
22354
b9a2a6135419
lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
156 void (*more)(struct sql_result **result, bool async, |
b9a2a6135419
lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
20528
diff
changeset
|
157 sql_query_callback_t *callback, void *context); |
5496
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
158 }; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
159 |
22514
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
160 struct sql_prepared_statement { |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
161 struct sql_db *db; |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
162 }; |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
163 |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
164 struct sql_statement { |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
165 struct sql_db *db; |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
166 |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
167 pool_t pool; |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
168 const char *query_template; |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
169 ARRAY_TYPE(const_string) args; |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
170 }; |
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
171 |
5496
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
172 struct sql_field_map { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
173 enum sql_field_type type; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
174 size_t offset; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
175 }; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
176 |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
177 struct sql_result { |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
178 struct sql_result_vfuncs v; |
9270
f9ebd72a73e8
SQL API change: SQL results can be now refed/unrefed.
Timo Sirainen <tss@iki.fi>
parents:
6474
diff
changeset
|
179 int refcount; |
5496
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
180 |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
181 struct sql_db *db; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
182 const struct sql_field_def *fields; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
183 |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
184 unsigned int map_size; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
185 struct sql_field_map *map; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
186 void *fetch_dest; |
72ee0521dfaf
Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents:
4458
diff
changeset
|
187 size_t fetch_dest_size; |
20526
9565305a8512
lib-sql: Added sql_result_get_error_type().
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
19072
diff
changeset
|
188 enum sql_result_error_type error_type; |
3736
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
189 |
11261
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
190 unsigned int failed:1; |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
191 unsigned int failed_try_retry:1; |
3736
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
192 unsigned int callback:1; |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
193 }; |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
194 |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
195 struct sql_transaction_context { |
3dd0ab18d8da
Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents:
3421
diff
changeset
|
196 struct sql_db *db; |
11261
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
197 |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
198 /* commit() must use this query list if head is non-NULL. */ |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
199 struct sql_transaction_query *head, *tail; |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
200 }; |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
201 |
4451
1a35d53c18fc
Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents:
4294
diff
changeset
|
202 ARRAY_DEFINE_TYPE(sql_drivers, const struct sql_db *); |
1a35d53c18fc
Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents:
4294
diff
changeset
|
203 |
1a35d53c18fc
Array API redesigned to work using unions. It now provides type safety
Timo Sirainen <tss@iki.fi>
parents:
4294
diff
changeset
|
204 extern ARRAY_TYPE(sql_drivers) sql_drivers; |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
205 extern struct sql_result sql_not_connected_result; |
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
206 |
11261
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
207 struct sql_db * |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
208 driver_sqlpool_init(const char *connect_string, const struct sql_db *driver); |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
209 |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
210 void sql_db_set_state(struct sql_db *db, enum sql_db_state state); |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
211 |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
212 void sql_transaction_add_query(struct sql_transaction_context *ctx, pool_t pool, |
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
213 const char *query, unsigned int *affected_rows); |
22514
7d189977dfe3
lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
22354
diff
changeset
|
214 const char *sql_statement_get_query(struct sql_statement *stmt); |
11261
1c8cc349ef55
lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents:
9888
diff
changeset
|
215 |
2754
3c3ac12be307
Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff
changeset
|
216 #endif |