annotate src/lib-sql/driver-test.c @ 22715:20415dd0b85a

dsync: Add per-mailbox sync lock that is always used. Both importing and exporting gets the lock before they even sync the mailbox. The lock is kept until the import/export finishes. This guarantees that no matter how dsync is run, two dsyncs can't be working on the same mailbox at the same time. This lock is in addition to the optional per-user lock enabled by the -l parameter. If the -l parameter is used, the same lock timeout is used for the per-mailbox lock. Otherwise 30s timeout is used. This should help to avoid email duplication when replication is enabled for public namespaces, and maybe in some other rare situations as well.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 28 Dec 2017 14:10:23 +0200
parents cb108f786fb4
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
22713
cb108f786fb4 Updated copyright notices to include the year 2018.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 22513
diff changeset
1 /* Copyright (c) 2017-2018 Dovecot authors, see the included COPYING file */
22513
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
2
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
3 #include "lib.h"
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
4 #include "test-lib.h"
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
5 #include "str.h"
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
6 #include "buffer.h"
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
7 #include "sql-api-private.h"
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
8 #include "driver-test.h"
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
9 #include "array.h"
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
10 #include "hex-binary.h"
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
11
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
12 struct test_sql_db {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
13 struct sql_db api;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
14
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
15 pool_t pool;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
16 ARRAY(struct test_driver_result) expected;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
17 const char *error;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
18 bool failed:1;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
19 };
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
20
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
21 struct test_sql_result {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
22 struct sql_result api;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
23 struct test_driver_result *result;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
24 const char *error;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
25 };
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
26
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
27 static struct sql_db *driver_test_mysql_init(const char *connect_string);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
28 static struct sql_db *driver_test_cassandra_init(const char *connect_string);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
29 static struct sql_db *driver_test_sqlite_init(const char *connect_string);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
30 static void driver_test_deinit(struct sql_db *_db);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
31 static int driver_test_connect(struct sql_db *_db);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
32 static void driver_test_disconnect(struct sql_db *_db);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
33 static const char *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
34 driver_test_mysql_escape_string(struct sql_db *_db, const char *string);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
35 static const char *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
36 driver_test_escape_string(struct sql_db *_db, const char *string);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
37 static void driver_test_exec(struct sql_db *_db, const char *query);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
38 static void driver_test_query(struct sql_db *_db, const char *query,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
39 sql_query_callback_t *callback, void *context);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
40 static struct sql_result *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
41 driver_test_query_s(struct sql_db *_db, const char *query);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
42 static struct sql_transaction_context *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
43 driver_test_transaction_begin(struct sql_db *_db);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
44 static void driver_test_transaction_commit(struct sql_transaction_context *ctx,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
45 sql_commit_callback_t *callback,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
46 void *context);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
47 static int
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
48 driver_test_transaction_commit_s(struct sql_transaction_context *ctx,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
49 const char **error_r);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
50 static void
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
51 driver_test_transaction_rollback(struct sql_transaction_context *ctx);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
52 static void
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
53 driver_test_update(struct sql_transaction_context *ctx, const char *query,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
54 unsigned int *affected_rows);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
55 static const char *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
56 driver_test_mysql_escape_blob(struct sql_db *_db, const unsigned char *data,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
57 size_t size);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
58 static const char *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
59 driver_test_escape_blob(struct sql_db *_db, const unsigned char *data,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
60 size_t size);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
61
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
62 static void driver_test_result_free(struct sql_result *result);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
63 static int driver_test_result_next_row(struct sql_result *result);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
64
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
65 static unsigned int
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
66 driver_test_result_get_fields_count(struct sql_result *result);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
67 static const char *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
68 driver_test_result_get_field_name(struct sql_result *result, unsigned int idx);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
69 static int
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
70 driver_test_result_find_field(struct sql_result *result, const char *field_name);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
71
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
72 static const char *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
73 driver_test_result_get_field_value(struct sql_result *result, unsigned int idx);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
74 static const unsigned char *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
75 driver_test_result_get_field_value_binary(struct sql_result *result,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
76 unsigned int idx, size_t *size_r);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
77 static const char *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
78 driver_test_result_find_field_value(struct sql_result *result,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
79 const char *field_name);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
80 static const char *const *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
81 driver_test_result_get_values(struct sql_result *result);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
82
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
83 const char *driver_test_result_get_error(struct sql_result *result);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
84
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
85
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
86 const struct sql_db driver_test_mysql_db = {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
87 .name = "mysql",
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
88
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
89 .v = {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
90 .init = driver_test_mysql_init,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
91 .deinit = driver_test_deinit,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
92 .connect = driver_test_connect,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
93 .disconnect = driver_test_disconnect,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
94 .escape_string = driver_test_mysql_escape_string,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
95 .exec = driver_test_exec,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
96 .query = driver_test_query,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
97 .query_s = driver_test_query_s,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
98
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
99 .transaction_begin = driver_test_transaction_begin,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
100 .transaction_commit = driver_test_transaction_commit,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
101 .transaction_commit_s = driver_test_transaction_commit_s,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
102 .transaction_rollback = driver_test_transaction_rollback,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
103 .update = driver_test_update,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
104
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
105 .escape_blob = driver_test_mysql_escape_blob,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
106 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
107 };
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
108
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
109 const struct sql_db driver_test_cassandra_db = {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
110 .name = "cassandra",
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
111
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
112 .v = {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
113 .init = driver_test_cassandra_init,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
114 .deinit = driver_test_deinit,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
115 .connect = driver_test_connect,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
116 .disconnect = driver_test_disconnect,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
117 .escape_string = driver_test_escape_string,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
118 .exec = driver_test_exec,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
119 .query = driver_test_query,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
120 .query_s = driver_test_query_s,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
121
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
122 .transaction_begin = driver_test_transaction_begin,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
123 .transaction_commit = driver_test_transaction_commit,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
124 .transaction_commit_s = driver_test_transaction_commit_s,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
125 .transaction_rollback = driver_test_transaction_rollback,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
126 .update = driver_test_update,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
127
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
128 .escape_blob = driver_test_escape_blob,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
129 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
130 };
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
131
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
132 const struct sql_db driver_test_sqlite_db = {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
133 .name = "sqlite",
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
134
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
135 .v = {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
136 .init = driver_test_sqlite_init,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
137 .deinit = driver_test_deinit,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
138 .connect = driver_test_connect,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
139 .disconnect = driver_test_disconnect,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
140 .escape_string = driver_test_escape_string,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
141 .exec = driver_test_exec,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
142 .query = driver_test_query,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
143 .query_s = driver_test_query_s,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
144
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
145 .transaction_begin = driver_test_transaction_begin,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
146 .transaction_commit = driver_test_transaction_commit,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
147 .transaction_commit_s = driver_test_transaction_commit_s,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
148 .transaction_rollback = driver_test_transaction_rollback,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
149 .update = driver_test_update,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
150
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
151 .escape_blob = driver_test_escape_blob,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
152 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
153 };
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
154
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
155
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
156 const struct sql_result driver_test_result = {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
157 .v = {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
158 .free = driver_test_result_free,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
159 .next_row = driver_test_result_next_row,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
160 .get_fields_count = driver_test_result_get_fields_count,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
161 .get_field_name = driver_test_result_get_field_name,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
162 .find_field = driver_test_result_find_field,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
163 .get_field_value = driver_test_result_get_field_value,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
164 .get_field_value_binary = driver_test_result_get_field_value_binary,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
165 .find_field_value = driver_test_result_find_field_value,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
166 .get_values = driver_test_result_get_values,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
167 .get_error = driver_test_result_get_error,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
168 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
169 };
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
170
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
171 void sql_driver_test_register(void)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
172 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
173 sql_driver_register(&driver_test_mysql_db);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
174 sql_driver_register(&driver_test_cassandra_db);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
175 sql_driver_register(&driver_test_sqlite_db);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
176 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
177
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
178 void sql_driver_test_unregister(void)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
179 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
180 sql_driver_unregister(&driver_test_mysql_db);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
181 sql_driver_unregister(&driver_test_cassandra_db);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
182 sql_driver_unregister(&driver_test_sqlite_db);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
183 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
184
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
185 static struct sql_db *driver_test_init(const struct sql_db *driver,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
186 const char *connect_string ATTR_UNUSED)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
187 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
188 pool_t pool = pool_alloconly_create(MEMPOOL_GROWING" test sql driver", 2048);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
189 struct test_sql_db *ret = p_new(pool, struct test_sql_db, 1);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
190 ret->pool = pool;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
191 ret->api = *driver;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
192 p_array_init(&ret->expected, pool, 8);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
193 return &ret->api;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
194 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
195
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
196 static struct sql_db *driver_test_mysql_init(const char *connect_string)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
197 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
198 return driver_test_init(&driver_test_mysql_db, connect_string);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
199 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
200
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
201 static struct sql_db *driver_test_cassandra_init(const char *connect_string)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
202 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
203 return driver_test_init(&driver_test_cassandra_db, connect_string);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
204 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
205
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
206 static struct sql_db *driver_test_sqlite_init(const char *connect_string)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
207 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
208 return driver_test_init(&driver_test_sqlite_db, connect_string);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
209 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
210
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
211 static void driver_test_deinit(struct sql_db *_db ATTR_UNUSED)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
212 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
213 struct test_sql_db *db = (struct test_sql_db*)_db;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
214 array_free(&_db->module_contexts);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
215 pool_unref(&db->pool);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
216 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
217
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
218 static int driver_test_connect(struct sql_db *_db ATTR_UNUSED)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
219 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
220 /* nix */
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
221 return 0;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
222 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
223
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
224 static void driver_test_disconnect(struct sql_db *_db ATTR_UNUSED)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
225 { }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
226
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
227 static const char *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
228 driver_test_mysql_escape_string(struct sql_db *_db ATTR_UNUSED,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
229 const char *string)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
230 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
231 string_t *esc = t_str_new(strlen(string));
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
232 for(const char *ptr = string; *ptr != '\0'; ptr++) {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
233 if (*ptr == '\n' || *ptr == '\r' || *ptr == '\\' ||
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
234 *ptr == '\'' || *ptr == '\"' || *ptr == '\x1a')
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
235 str_append_c(esc, '\\');
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
236 str_append_c(esc, *ptr);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
237 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
238 return str_c(esc);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
239 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
240
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
241 static const char *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
242 driver_test_escape_string(struct sql_db *_db ATTR_UNUSED, const char *string)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
243 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
244 return string;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
245 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
246
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
247 static void driver_test_exec(struct sql_db *_db, const char *query)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
248 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
249 struct test_sql_db *db = (struct test_sql_db*)_db;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
250 struct test_driver_result *result =
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
251 array_idx_modifiable(&db->expected, 0);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
252 i_assert(result->cur < result->nqueries);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
253
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
254 /* i_debug("DUMMY EXECUTE: %s", query);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
255 i_debug("DUMMY EXPECT : %s", result->queries[result->cur]); */
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
256
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
257 test_assert(strcmp(result->queries[result->cur], query)==0);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
258
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
259 if (strcmp(result->queries[result->cur], query) != 0) {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
260 db->error = "Invalid query";
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
261 db->failed = TRUE;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
262 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
263
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
264 result->cur++;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
265 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
266
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
267 static void
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
268 driver_test_query(struct sql_db *_db, const char *query,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
269 sql_query_callback_t *callback, void *context)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
270 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
271 struct sql_result *result = driver_test_query_s(_db, query);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
272 if (callback != NULL)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
273 callback(result, context);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
274 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
275
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
276 static struct sql_result *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
277 driver_test_query_s(struct sql_db *_db, const char *query)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
278 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
279 struct test_sql_db *db = (struct test_sql_db*)_db;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
280 struct test_driver_result *result =
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
281 array_idx_modifiable(&db->expected, 0);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
282 struct test_sql_result *res = i_new(struct test_sql_result, 1);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
283
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
284 driver_test_exec(_db, query);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
285
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
286 if (db->failed) {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
287 res->api.failed = TRUE;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
288 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
289
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
290 res->api.v = driver_test_result.v;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
291 res->api.db = _db;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
292 if (result->result != NULL) {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
293 res->result = i_new(struct test_driver_result, 1);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
294 memcpy(res->result, result, sizeof(*result));
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
295 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
296 res->api.refcount = 1;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
297
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
298 /* drop it from array if it's used up */
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
299 if (result->cur == result->nqueries)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
300 array_delete(&db->expected, 0, 1);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
301
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
302 return &res->api;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
303 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
304
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
305 static struct sql_transaction_context *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
306 driver_test_transaction_begin(struct sql_db *_db)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
307 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
308 struct sql_transaction_context *ctx =
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
309 i_new(struct sql_transaction_context, 1);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
310 ctx->db = _db;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
311 return ctx;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
312 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
313
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
314 static void
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
315 driver_test_transaction_commit(struct sql_transaction_context *ctx,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
316 sql_commit_callback_t *callback, void *context)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
317 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
318 struct sql_commit_result res;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
319 res.error_type = driver_test_transaction_commit_s(ctx, &res.error);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
320 callback(&res, context);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
321 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
322
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
323 static int
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
324 driver_test_transaction_commit_s(struct sql_transaction_context *ctx,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
325 const char **error_r)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
326 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
327 struct test_sql_db *db = (struct test_sql_db*)ctx->db;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
328 int ret = 0;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
329
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
330 if (db->error != NULL) {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
331 *error_r = db->error;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
332 ret = -1;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
333 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
334 i_free(ctx);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
335 db->error = NULL;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
336 db->failed = FALSE;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
337
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
338 return ret;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
339 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
340
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
341 static void
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
342 driver_test_transaction_rollback(struct sql_transaction_context *ctx)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
343 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
344 struct test_sql_db *db = (struct test_sql_db*)ctx->db;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
345 i_free(ctx);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
346 db->error = NULL;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
347 db->failed = FALSE;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
348 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
349
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
350 static void
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
351 driver_test_update(struct sql_transaction_context *ctx, const char *query,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
352 unsigned int *affected_rows)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
353 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
354 struct test_sql_db *db= (struct test_sql_db*)ctx->db;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
355 struct test_driver_result *result =
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
356 array_idx_modifiable(&db->expected, 0);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
357 driver_test_exec(ctx->db, query);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
358
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
359 if (affected_rows != NULL)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
360 *affected_rows = result->affected_rows;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
361
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
362 /* drop it from array if it's used up */
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
363 if (result->cur == result->nqueries)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
364 array_delete(&db->expected, 0, 1);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
365 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
366
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
367 static const char *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
368 driver_test_mysql_escape_blob(struct sql_db *_db ATTR_UNUSED,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
369 const unsigned char *data, size_t size)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
370 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
371 return t_strdup_printf("X'%s'", binary_to_hex(data,size));
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
372 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
373
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
374 static const char *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
375 driver_test_escape_blob(struct sql_db *_db ATTR_UNUSED,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
376 const unsigned char *data, size_t size)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
377 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
378 return t_strdup_printf("X'%s'", binary_to_hex(data,size));
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
379 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
380
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
381 static void driver_test_result_free(struct sql_result *result)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
382 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
383 struct test_sql_result *tsr =
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
384 (struct test_sql_result *)result;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
385 if (tsr->result != NULL)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
386 i_free(tsr->result);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
387 i_free(result);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
388 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
389
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
390 static int driver_test_result_next_row(struct sql_result *result)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
391 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
392 struct test_sql_result *tsr =
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
393 (struct test_sql_result *)result;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
394 struct test_driver_result *r = tsr->result;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
395
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
396 if (r == NULL) return 0;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
397
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
398 struct test_driver_result_set *rs =
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
399 &(r->result[r->cur-1]);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
400 if (rs->cur <= rs->rows) {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
401 rs->cur++;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
402 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
403
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
404 return rs->cur <= rs->rows ? 1 : 0;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
405 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
406
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
407 static unsigned int
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
408 driver_test_result_get_fields_count(struct sql_result *result)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
409 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
410 struct test_sql_result *tsr =
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
411 (struct test_sql_result *)result;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
412 struct test_driver_result *r = tsr->result;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
413 struct test_driver_result_set *rs =
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
414 &(r->result[r->cur-1]);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
415 return rs->cols;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
416 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
417
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
418 static const char *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
419 driver_test_result_get_field_name(struct sql_result *result, unsigned int idx)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
420 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
421 struct test_sql_result *tsr =
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
422 (struct test_sql_result *)result;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
423 struct test_driver_result *r = tsr->result;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
424 struct test_driver_result_set *rs =
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
425 &(r->result[r->cur-1]);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
426 i_assert(idx < rs->cols);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
427 return rs->col_names[idx];
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
428 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
429
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
430 static int
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
431 driver_test_result_find_field(struct sql_result *result, const char *field_name)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
432 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
433 struct test_sql_result *tsr =
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
434 (struct test_sql_result *)result;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
435 struct test_driver_result *r = tsr->result;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
436 struct test_driver_result_set *rs =
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
437 &(r->result[r->cur-1]);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
438 for(size_t i = 0; i < rs->cols; i++) {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
439 if (strcmp(field_name, rs->col_names[i])==0)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
440 return i;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
441 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
442 return -1;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
443 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
444
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
445 static const char *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
446 driver_test_result_get_field_value(struct sql_result *result, unsigned int idx)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
447 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
448 struct test_sql_result *tsr =
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
449 (struct test_sql_result *)result;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
450 struct test_driver_result *r = tsr->result;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
451 struct test_driver_result_set *rs =
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
452 &(r->result[r->cur-1]);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
453
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
454 i_assert(idx < rs->cols);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
455 i_assert(rs->cur <= rs->rows);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
456
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
457 return rs->row_data[rs->cur-1][idx];
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
458 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
459 static const unsigned char *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
460 driver_test_result_get_field_value_binary(struct sql_result *result,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
461 unsigned int idx, size_t *size_r)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
462 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
463 buffer_t *buf = buffer_create_dynamic(pool_datastack_create(), 64);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
464 const char *value = driver_test_result_get_field_value(result, idx);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
465 /* expect it hex encoded */
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
466 if (hex_to_binary(value, buf) < 0) {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
467 *size_r = 0;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
468 return NULL;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
469 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
470 *size_r = buf->used;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
471 return buf->data;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
472 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
473 static const char *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
474 driver_test_result_find_field_value(struct sql_result *result,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
475 const char *field_name)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
476 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
477 int idx = driver_test_result_find_field(result, field_name);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
478 if (idx < 0) return NULL;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
479 return driver_test_result_get_field_value(result, idx);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
480 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
481 static const char *const *
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
482 driver_test_result_get_values(struct sql_result *result)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
483 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
484 struct test_sql_result *tsr =
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
485 (struct test_sql_result *)result;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
486 struct test_driver_result *r = tsr->result;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
487 struct test_driver_result_set *rs =
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
488 &(r->result[r->cur-1]);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
489 i_assert(rs->cur <= rs->rows);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
490 return rs->row_data[rs->cur-1];
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
491 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
492
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
493 const char *driver_test_result_get_error(struct sql_result *result)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
494 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
495 struct test_sql_result *tsr =
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
496 (struct test_sql_result *)result;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
497 return tsr->error;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
498 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
499
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
500
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
501 void sql_driver_test_add_expected_result(struct sql_db *_db,
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
502 const struct test_driver_result *result)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
503 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
504 struct test_sql_db *db = (struct test_sql_db*)_db;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
505 array_append(&db->expected, result, 1);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
506 }
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
507
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
508 void sql_driver_test_clear_expected_results(struct sql_db *_db)
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
509 {
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
510 struct test_sql_db *db = (struct test_sql_db*)_db;
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
511 array_clear(&db->expected);
59b0c5ee8adf lib-sql: Explicitly specify used *_vfuncs methods for drivers.
Timo Sirainen <timo.sirainen@dovecot.fi>
parents:
diff changeset
512 }