annotate src/lib-sql/sql-api.h @ 22614:cf66220d281e

doveadm proxy: Don't crash if remote doesn't support log proxying
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Sat, 14 Oct 2017 12:54:18 +0300
parents 7d189977dfe3
children a8220182eac6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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_H
e4eb71ae8e96 Changed .h ifdef/defines to use <NAME>_H format.
Timo Sirainen <tss@iki.fi>
parents: 5496
diff changeset
2 #define SQL_API_H
2754
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3
3736
3dd0ab18d8da Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents: 3520
diff changeset
4 /* This SQL API is designed to work asynchronously. The underlying drivers
3dd0ab18d8da Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents: 3520
diff changeset
5 however may not. */
3dd0ab18d8da Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents: 3520
diff changeset
6
3162
5d6787582410 Added sql_get_flags() function, currently returning only
Timo Sirainen <tss@iki.fi>
parents: 2754
diff changeset
7 enum sql_db_flags {
5d6787582410 Added sql_get_flags() function, currently returning only
Timo Sirainen <tss@iki.fi>
parents: 2754
diff changeset
8 /* Set if queries are not executed asynchronously */
11261
1c8cc349ef55 lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents: 9888
diff changeset
9 SQL_DB_FLAG_BLOCKING = 0x01,
1c8cc349ef55 lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents: 9888
diff changeset
10 /* Set if database wants to use connection pooling */
22514
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
11 SQL_DB_FLAG_POOLED = 0x02,
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
12 /* Prepared statements are supported by the database. If they aren't,
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
13 the functions can still be used, but they're just internally
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
14 convered into regular statements. */
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
15 SQL_DB_FLAG_PREP_STATEMENTS = 0x04,
3162
5d6787582410 Added sql_get_flags() function, currently returning only
Timo Sirainen <tss@iki.fi>
parents: 2754
diff changeset
16 };
5d6787582410 Added sql_get_flags() function, currently returning only
Timo Sirainen <tss@iki.fi>
parents: 2754
diff changeset
17
5496
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
18 enum sql_field_type {
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
19 SQL_TYPE_STR,
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
20 SQL_TYPE_UINT,
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
21 SQL_TYPE_ULLONG,
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
22 SQL_TYPE_BOOL
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
23 };
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
24
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
25 struct sql_field_def {
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
26 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: 4907
diff changeset
27 const char *name;
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
28 size_t offset;
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
29 };
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
30
20526
9565305a8512 lib-sql: Added sql_result_get_error_type().
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19072
diff changeset
31 enum sql_result_error_type {
9565305a8512 lib-sql: Added sql_result_get_error_type().
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19072
diff changeset
32 SQL_RESULT_ERROR_TYPE_UNKNOWN = 0,
9565305a8512 lib-sql: Added sql_result_get_error_type().
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19072
diff changeset
33 /* It's unknown whether write succeeded or not. This could be due to
9565305a8512 lib-sql: Added sql_result_get_error_type().
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19072
diff changeset
34 a timeout or a disconnection from server. */
9565305a8512 lib-sql: Added sql_result_get_error_type().
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19072
diff changeset
35 SQL_RESULT_ERROR_TYPE_WRITE_UNCERTAIN
9565305a8512 lib-sql: Added sql_result_get_error_type().
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19072
diff changeset
36 };
9565305a8512 lib-sql: Added sql_result_get_error_type().
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19072
diff changeset
37
22354
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
38 enum sql_result_next {
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
39 /* Row was returned */
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
40 SQL_RESULT_NEXT_OK = 1,
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
41 /* There are no more rows */
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
42 SQL_RESULT_NEXT_LAST = 0,
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
43 /* Error occurred - see sql_result_get_error*() */
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
44 SQL_RESULT_NEXT_ERROR = -1,
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
45 /* There are more results - call sql_result_more() */
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
46 SQL_RESULT_NEXT_MORE = -99
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
47 };
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
48
5496
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
49 #define SQL_DEF_STRUCT(name, struct_name, type, c_type) \
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
50 { (type) + COMPILE_ERROR_IF_TYPES_NOT_COMPATIBLE( \
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
51 ((struct struct_name *)0)->name, c_type), \
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
52 #name, offsetof(struct struct_name, name) }
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
53
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
54 #define SQL_DEF_STRUCT_STR(name, struct_name) \
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
55 SQL_DEF_STRUCT(name, struct_name, SQL_TYPE_STR, const char *)
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
56 #define SQL_DEF_STRUCT_UINT(name, struct_name) \
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
57 SQL_DEF_STRUCT(name, struct_name, SQL_TYPE_UINT, unsigned int)
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
58 #define SQL_DEF_STRUCT_ULLONG(name, struct_name) \
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
59 SQL_DEF_STRUCT(name, struct_name, SQL_TYPE_ULLONG, unsigned long long)
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
60 #define SQL_DEF_STRUCT_BOOL(name, struct_name) \
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
61 SQL_DEF_STRUCT(name, struct_name, SQL_TYPE_BOOL, bool)
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
62
2754
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 struct sql_db;
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64 struct sql_result;
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65
20528
b885fee56a82 lib-sql: Added sql_transaction_commit2()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20526
diff changeset
66 struct sql_commit_result {
b885fee56a82 lib-sql: Added sql_transaction_commit2()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20526
diff changeset
67 const char *error;
b885fee56a82 lib-sql: Added sql_transaction_commit2()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20526
diff changeset
68 enum sql_result_error_type error_type;
b885fee56a82 lib-sql: Added sql_transaction_commit2()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20526
diff changeset
69 };
b885fee56a82 lib-sql: Added sql_transaction_commit2()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20526
diff changeset
70
2754
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71 typedef void sql_query_callback_t(struct sql_result *result, void *context);
3736
3dd0ab18d8da Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents: 3520
diff changeset
72 typedef void sql_commit_callback_t(const char *error, void *context);
20528
b885fee56a82 lib-sql: Added sql_transaction_commit2()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20526
diff changeset
73 typedef void sql_commit2_callback_t(const struct sql_commit_result *result, void *context);
3736
3dd0ab18d8da Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents: 3520
diff changeset
74
3943
cbe5c6772e0d Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
75 void sql_drivers_init(void);
cbe5c6772e0d Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
76 void sql_drivers_deinit(void);
cbe5c6772e0d Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
77
cbe5c6772e0d Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
78 /* register all built-in SQL drivers */
cbe5c6772e0d Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
79 void sql_drivers_register_all(void);
cbe5c6772e0d Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
80
cbe5c6772e0d Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
81 void sql_driver_register(const struct sql_db *driver);
cbe5c6772e0d Added support for dynamically building SQL drivers.
Timo Sirainen <tss@iki.fi>
parents: 3879
diff changeset
82 void sql_driver_unregister(const struct sql_db *driver);
2754
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
84 /* Initialize database connections. db_driver is the database driver name,
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85 eg. "mysql" or "pgsql". connect_string is driver-specific. */
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86 struct sql_db *sql_init(const char *db_driver, const char *connect_string);
3879
928229f8b3e6 deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents: 3736
diff changeset
87 void sql_deinit(struct sql_db **db);
2754
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
88
3162
5d6787582410 Added sql_get_flags() function, currently returning only
Timo Sirainen <tss@iki.fi>
parents: 2754
diff changeset
89 /* Returns SQL database state flags. */
5d6787582410 Added sql_get_flags() function, currently returning only
Timo Sirainen <tss@iki.fi>
parents: 2754
diff changeset
90 enum sql_db_flags sql_get_flags(struct sql_db *db);
5d6787582410 Added sql_get_flags() function, currently returning only
Timo Sirainen <tss@iki.fi>
parents: 2754
diff changeset
91
3421
c624ffa9e6f0 Added sql_connect() to do explicit connecting. sql_init() no longer does.
Timo Sirainen <tss@iki.fi>
parents: 3162
diff changeset
92 /* Explicitly connect to the database. It's not required to call this function
c624ffa9e6f0 Added sql_connect() to do explicit connecting. sql_init() no longer does.
Timo Sirainen <tss@iki.fi>
parents: 3162
diff changeset
93 though. Returns -1 if we're not connected, 0 if we started connecting or
c624ffa9e6f0 Added sql_connect() to do explicit connecting. sql_init() no longer does.
Timo Sirainen <tss@iki.fi>
parents: 3162
diff changeset
94 1 if we are fully connected now. */
c624ffa9e6f0 Added sql_connect() to do explicit connecting. sql_init() no longer does.
Timo Sirainen <tss@iki.fi>
parents: 3162
diff changeset
95 int sql_connect(struct sql_db *db);
12033
b88b207b79b2 lib-sql: sql_disconnect() now aborts all pending requests.
Timo Sirainen <tss@iki.fi>
parents: 11261
diff changeset
96 /* Explicitly disconnect from database and abort pending auth requests. */
11261
1c8cc349ef55 lib-sql: Use generic sql connection pooling code for mysql/pgsql.
Timo Sirainen <tss@iki.fi>
parents: 9888
diff changeset
97 void sql_disconnect(struct sql_db *db);
3421
c624ffa9e6f0 Added sql_connect() to do explicit connecting. sql_init() no longer does.
Timo Sirainen <tss@iki.fi>
parents: 3162
diff changeset
98
4294
1a98cb709395 Added sql_escape_string()
Timo Sirainen <tss@iki.fi>
parents: 4047
diff changeset
99 /* Escape the given string if needed and return it. */
4458
3e196acd60b7 sql_escape_string() should return const char *, not char *.
Timo Sirainen <tss@iki.fi>
parents: 4294
diff changeset
100 const char *sql_escape_string(struct sql_db *db, const char *string);
19072
113f4e32cb19 lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents: 14921
diff changeset
101 /* Escape the given data as a string. */
113f4e32cb19 lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents: 14921
diff changeset
102 const char *sql_escape_blob(struct sql_db *db,
113f4e32cb19 lib-sql: Implemented sql_escape_blob()
Timo Sirainen <tss@iki.fi>
parents: 14921
diff changeset
103 const unsigned char *data, size_t size);
4294
1a98cb709395 Added sql_escape_string()
Timo Sirainen <tss@iki.fi>
parents: 4047
diff changeset
104
2754
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
105 /* Execute SQL query without waiting for results. */
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
106 void sql_exec(struct sql_db *db, const char *query);
5496
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
107 /* Execute SQL query and return result in callback. If fields list is given,
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
108 the returned fields are validated to be of correct type, and you can use
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
109 sql_result_next_row_get() */
2754
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
110 void sql_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
111 sql_query_callback_t *callback, void *context);
14921
d3db2ba15d00 Removed CONTEXT_TYPE_SAFETY macro and reimplemented its functionality better.
Timo Sirainen <tss@iki.fi>
parents: 12033
diff changeset
112 #define sql_query(db, query, callback, context) \
d3db2ba15d00 Removed CONTEXT_TYPE_SAFETY macro and reimplemented its functionality better.
Timo Sirainen <tss@iki.fi>
parents: 12033
diff changeset
113 sql_query(db, query + \
d3db2ba15d00 Removed CONTEXT_TYPE_SAFETY macro and reimplemented its functionality better.
Timo Sirainen <tss@iki.fi>
parents: 12033
diff changeset
114 CALLBACK_TYPECHECK(callback, void (*)( \
d3db2ba15d00 Removed CONTEXT_TYPE_SAFETY macro and reimplemented its functionality better.
Timo Sirainen <tss@iki.fi>
parents: 12033
diff changeset
115 struct sql_result *, typeof(context))), \
d3db2ba15d00 Removed CONTEXT_TYPE_SAFETY macro and reimplemented its functionality better.
Timo Sirainen <tss@iki.fi>
parents: 12033
diff changeset
116 (sql_query_callback_t *)callback, context)
3736
3dd0ab18d8da Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents: 3520
diff changeset
117 /* Execute blocking SQL query and return result. */
3dd0ab18d8da Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents: 3520
diff changeset
118 struct sql_result *sql_query_s(struct sql_db *db, const char *query);
2754
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
119
22514
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
120 struct sql_prepared_statement *
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
121 sql_prepared_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
122 void sql_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
123
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
124 struct sql_statement *
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
125 sql_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
126 struct sql_statement *
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
127 sql_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
128 void sql_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
129 void sql_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
130 const struct timespec *ts);
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
131 void sql_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
132 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
133 void sql_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
134 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
135 size_t value_size);
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
136 void sql_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
137 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
138 void sql_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
139 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
140 #define sql_statement_query(stmt, callback, context) \
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
141 sql_statement_query(stmt, \
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
142 (sql_query_callback_t *)callback, context + \
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
143 CALLBACK_TYPECHECK(callback, void (*)( \
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
144 struct sql_result *, typeof(context))))
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
145 struct sql_result *sql_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
146
5496
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
147 void sql_result_setup_fetch(struct sql_result *result,
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
148 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: 4907
diff changeset
149 void *dest, size_t dest_size);
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
150
22354
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
151 /* Go to next row. See enum sql_result_next. */
2754
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
152 int sql_result_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
153
22354
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
154 /* If sql_result_next_row() returned SQL_RESULT_NEXT_MORE, this can be called
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
155 to continue returning more results. The result is freed with this call, so
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
156 it must not be accesed anymore until the callback is finished. */
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
157 void sql_result_more(struct sql_result **result,
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
158 sql_query_callback_t *callback, void *context);
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
159 #define sql_result_more(result, callback, context) \
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
160 sql_result_more(result + \
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
161 CALLBACK_TYPECHECK(callback, void (*)( \
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
162 struct sql_result *, typeof(context))), \
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
163 (sql_query_callback_t *)callback, context)
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
164 /* Synchronous version of sql_result_more(). The result will be replaced with
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
165 the new result. */
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
166 void sql_result_more_s(struct sql_result **result);
b9a2a6135419 lib-sql: Add API support for asynchronously iterating over rows.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20528
diff changeset
167
9270
f9ebd72a73e8 SQL API change: SQL results can be now refed/unrefed.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
168 void sql_result_ref(struct sql_result *result);
f9ebd72a73e8 SQL API change: SQL results can be now refed/unrefed.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
169 /* Needs to be called only with sql_query_s() or when result has been
f9ebd72a73e8 SQL API change: SQL results can be now refed/unrefed.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
170 explicitly referenced. */
f9ebd72a73e8 SQL API change: SQL results can be now refed/unrefed.
Timo Sirainen <tss@iki.fi>
parents: 6410
diff changeset
171 void sql_result_unref(struct sql_result *result);
3736
3dd0ab18d8da Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents: 3520
diff changeset
172
2754
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
173 /* Return number of fields in result. */
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
174 unsigned int sql_result_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
175 /* Return name of the given field index. */
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
176 const char *sql_result_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
177 unsigned int idx);
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
178 /* Return field index for given name, or -1 if not found. */
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
179 int sql_result_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
180
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
181 /* Returns value of given field as string. */
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
182 const char *sql_result_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
183 unsigned int idx);
5496
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
184 const unsigned char *
72ee0521dfaf Added sql_result_setup_fetch() which makes it easier to fetch rows into
Timo Sirainen <tss@iki.fi>
parents: 4907
diff changeset
185 sql_result_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: 4907
diff changeset
186 unsigned int idx, size_t *size_r);
2754
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
187 const char *sql_result_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
188 const char *field_name);
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
189 /* Return all values of current row. */
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
190 const char *const *sql_result_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
191
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
192 /* Return last error message in result. */
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
193 const char *sql_result_get_error(struct sql_result *result);
20526
9565305a8512 lib-sql: Added sql_result_get_error_type().
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 19072
diff changeset
194 enum sql_result_error_type sql_result_get_error_type(struct sql_result *result);
2754
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
195
3736
3dd0ab18d8da Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents: 3520
diff changeset
196 /* Begin a new transaction. Currently you're limited to only one open
3dd0ab18d8da Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents: 3520
diff changeset
197 transaction at a time. */
3dd0ab18d8da Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents: 3520
diff changeset
198 struct sql_transaction_context *sql_transaction_begin(struct sql_db *db);
3dd0ab18d8da Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents: 3520
diff changeset
199 /* Commit transaction. */
3879
928229f8b3e6 deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents: 3736
diff changeset
200 void sql_transaction_commit(struct sql_transaction_context **ctx,
3736
3dd0ab18d8da Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents: 3520
diff changeset
201 sql_commit_callback_t *callback, void *context);
14921
d3db2ba15d00 Removed CONTEXT_TYPE_SAFETY macro and reimplemented its functionality better.
Timo Sirainen <tss@iki.fi>
parents: 12033
diff changeset
202 #define sql_transaction_commit(ctx, callback, context) \
d3db2ba15d00 Removed CONTEXT_TYPE_SAFETY macro and reimplemented its functionality better.
Timo Sirainen <tss@iki.fi>
parents: 12033
diff changeset
203 sql_transaction_commit(ctx + \
d3db2ba15d00 Removed CONTEXT_TYPE_SAFETY macro and reimplemented its functionality better.
Timo Sirainen <tss@iki.fi>
parents: 12033
diff changeset
204 CALLBACK_TYPECHECK(callback, void (*)( \
d3db2ba15d00 Removed CONTEXT_TYPE_SAFETY macro and reimplemented its functionality better.
Timo Sirainen <tss@iki.fi>
parents: 12033
diff changeset
205 const char *, typeof(context))), \
4907
5b4c9b20eba0 Replaced void *context from a lot of callbacks with the actual context
Timo Sirainen <tss@iki.fi>
parents: 4906
diff changeset
206 (sql_commit_callback_t *)callback, context)
20528
b885fee56a82 lib-sql: Added sql_transaction_commit2()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20526
diff changeset
207 void sql_transaction_commit2(struct sql_transaction_context **ctx,
b885fee56a82 lib-sql: Added sql_transaction_commit2()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20526
diff changeset
208 sql_commit2_callback_t *callback, void *context);
b885fee56a82 lib-sql: Added sql_transaction_commit2()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20526
diff changeset
209 #define sql_transaction_commit2(ctx, callback, context) \
b885fee56a82 lib-sql: Added sql_transaction_commit2()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20526
diff changeset
210 sql_transaction_commit2(ctx + \
b885fee56a82 lib-sql: Added sql_transaction_commit2()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20526
diff changeset
211 CALLBACK_TYPECHECK(callback, void (*)( \
b885fee56a82 lib-sql: Added sql_transaction_commit2()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20526
diff changeset
212 const struct sql_commit_result *, typeof(context))), \
b885fee56a82 lib-sql: Added sql_transaction_commit2()
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 20526
diff changeset
213 (sql_commit2_callback_t *)callback, context)
3736
3dd0ab18d8da Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents: 3520
diff changeset
214 /* Synchronous commit. Returns 0 if ok, -1 if error. */
3879
928229f8b3e6 deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents: 3736
diff changeset
215 int sql_transaction_commit_s(struct sql_transaction_context **ctx,
3736
3dd0ab18d8da Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents: 3520
diff changeset
216 const char **error_r);
3879
928229f8b3e6 deinit, unref, destroy, close, free, etc. functions now take a pointer to
Timo Sirainen <tss@iki.fi>
parents: 3736
diff changeset
217 void sql_transaction_rollback(struct sql_transaction_context **ctx);
3736
3dd0ab18d8da Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents: 3520
diff changeset
218
3dd0ab18d8da Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents: 3520
diff changeset
219 /* Execute query in given transaction. */
3dd0ab18d8da Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents: 3520
diff changeset
220 void sql_update(struct sql_transaction_context *ctx, const char *query);
22514
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
221 void sql_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
222 struct sql_statement **stmt);
9888
551c273f4844 lib-sql: Added sql_update_get_rows().
Timo Sirainen <tss@iki.fi>
parents: 9270
diff changeset
223 /* Save the number of rows updated by this query. The value is set before
551c273f4844 lib-sql: Added sql_update_get_rows().
Timo Sirainen <tss@iki.fi>
parents: 9270
diff changeset
224 commit callback is called. */
551c273f4844 lib-sql: Added sql_update_get_rows().
Timo Sirainen <tss@iki.fi>
parents: 9270
diff changeset
225 void sql_update_get_rows(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
226 unsigned int *affected_rows);
22514
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
227 void sql_update_stmt_get_rows(struct sql_transaction_context *ctx,
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
228 struct sql_statement **stmt,
7d189977dfe3 lib-sql: Add support for prepared SQL statements.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents: 22354
diff changeset
229 unsigned int *affected_rows);
3736
3dd0ab18d8da Added support for transactions and synchronous SQL queries.
Timo Sirainen <tss@iki.fi>
parents: 3520
diff changeset
230
2754
3c3ac12be307 Created generic asynchronous SQL API and implemented MySQL and PostgreSQL
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
231 #endif