Mercurial > dovecot > core-2.2
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 |
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 } |