dovecot: Added module_contexts to struct sql_db.
dovecot at dovecot.org
dovecot at dovecot.org
Sat Sep 22 19:40:51 EEST 2007
details: http://hg.dovecot.org/dovecot/rev/46c3e1ee196f
changeset: 6474:46c3e1ee196f
user: Timo Sirainen <tss at iki.fi>
date: Sat Sep 22 19:01:19 2007 +0300
description:
Added module_contexts to struct sql_db.
diffstat:
5 files changed, 98 insertions(+), 75 deletions(-)
src/lib-sql/driver-mysql.c | 43 ++++++++++++++++++++---------------------
src/lib-sql/driver-pgsql.c | 33 ++++++++++++++++---------------
src/lib-sql/driver-sqlite.c | 36 +++++++++++++++++-----------------
src/lib-sql/sql-api-private.h | 19 ++++++++++++++++--
src/lib-sql/sql-api.c | 42 +++++++++++++++++++++++-----------------
diffs (truncated from 323 to 300 lines):
diff -r bd886e12aaa0 -r 46c3e1ee196f src/lib-sql/driver-mysql.c
--- a/src/lib-sql/driver-mysql.c Sat Sep 22 18:33:02 2007 +0300
+++ b/src/lib-sql/driver-mysql.c Sat Sep 22 19:01:19 2007 +0300
@@ -245,14 +245,11 @@ static struct sql_db *driver_mysql_init_
static struct sql_db *driver_mysql_init_v(const char *connect_string)
{
struct mysql_db *db;
- pool_t pool;
-
- pool = pool_alloconly_create("mysql driver", 512);
-
- db = p_new(pool, struct mysql_db, 1);
- db->pool = pool;
+
+ db = i_new(struct mysql_db, 1);
+ db->pool = pool_alloconly_create("mysql driver", 512);;
db->api = driver_mysql_db;
- p_array_init(&db->connections, pool, 6);
+ p_array_init(&db->connections, db->pool, 6);
driver_mysql_parse_connect_string(db, connect_string);
return &db->api;
@@ -657,21 +654,23 @@ struct sql_db driver_mysql_db = {
struct sql_db driver_mysql_db = {
"mysql",
- driver_mysql_init_v,
- driver_mysql_deinit_v,
- driver_mysql_get_flags,
- driver_mysql_connect_all,
- driver_mysql_escape_string,
- driver_mysql_exec,
- driver_mysql_query,
- driver_mysql_query_s,
-
- driver_mysql_transaction_begin,
- driver_mysql_transaction_commit,
- driver_mysql_transaction_commit_s,
- driver_mysql_transaction_rollback,
-
- driver_mysql_update
+ MEMBER(v) {
+ driver_mysql_init_v,
+ driver_mysql_deinit_v,
+ driver_mysql_get_flags,
+ driver_mysql_connect_all,
+ driver_mysql_escape_string,
+ driver_mysql_exec,
+ driver_mysql_query,
+ driver_mysql_query_s,
+
+ driver_mysql_transaction_begin,
+ driver_mysql_transaction_commit,
+ driver_mysql_transaction_commit_s,
+ driver_mysql_transaction_rollback,
+
+ driver_mysql_update
+ }
};
struct sql_result driver_mysql_result = {
diff -r bd886e12aaa0 -r 46c3e1ee196f src/lib-sql/driver-pgsql.c
--- a/src/lib-sql/driver-pgsql.c Sat Sep 22 18:33:02 2007 +0300
+++ b/src/lib-sql/driver-pgsql.c Sat Sep 22 19:01:19 2007 +0300
@@ -213,7 +213,6 @@ static void driver_pgsql_deinit_v(struct
driver_pgsql_close(db);
i_free(db->error);
i_free(db->connect_string);
- i_free(db);
}
static enum sql_db_flags
@@ -864,21 +863,23 @@ struct sql_db driver_pgsql_db = {
struct sql_db driver_pgsql_db = {
"pgsql",
- driver_pgsql_init_v,
- driver_pgsql_deinit_v,
- driver_pgsql_get_flags,
- driver_pgsql_connect,
- driver_pgsql_escape_string,
- driver_pgsql_exec,
- driver_pgsql_query,
- driver_pgsql_query_s,
-
- driver_pgsql_transaction_begin,
- driver_pgsql_transaction_commit,
- driver_pgsql_transaction_commit_s,
- driver_pgsql_transaction_rollback,
-
- driver_pgsql_update
+ MEMBER(v) {
+ driver_pgsql_init_v,
+ driver_pgsql_deinit_v,
+ driver_pgsql_get_flags,
+ driver_pgsql_connect,
+ driver_pgsql_escape_string,
+ driver_pgsql_exec,
+ driver_pgsql_query,
+ driver_pgsql_query_s,
+
+ driver_pgsql_transaction_begin,
+ driver_pgsql_transaction_commit,
+ driver_pgsql_transaction_commit_s,
+ driver_pgsql_transaction_rollback,
+
+ driver_pgsql_update
+ }
};
struct sql_result driver_pgsql_result = {
diff -r bd886e12aaa0 -r 46c3e1ee196f src/lib-sql/driver-sqlite.c
--- a/src/lib-sql/driver-sqlite.c Sat Sep 22 18:33:02 2007 +0300
+++ b/src/lib-sql/driver-sqlite.c Sat Sep 22 19:01:19 2007 +0300
@@ -60,13 +60,11 @@ static struct sql_db *driver_sqlite_init
static struct sql_db *driver_sqlite_init_v(const char *connect_string)
{
struct sqlite_db *db;
- pool_t pool;
i_assert(connect_string != NULL);
- pool = pool_alloconly_create("sqlite driver", 512);
- db = p_new(pool, struct sqlite_db, 1);
- db->pool = pool;
+ db = i_new(struct sqlite_db, 1);
+ db->pool = pool_alloconly_create("sqlite driver", 512);;
db->api = driver_sqlite_db;
db->dbfile = p_strdup(db->pool, connect_string);
db->connected = FALSE;
@@ -374,20 +372,22 @@ struct sql_db driver_sqlite_db = {
struct sql_db driver_sqlite_db = {
"sqlite",
- driver_sqlite_init_v,
- driver_sqlite_deinit_v,
- driver_sqlite_get_flags,
- driver_sqlite_connect,
- driver_sqlite_escape_string,
- driver_sqlite_exec,
- driver_sqlite_query,
- driver_sqlite_query_s,
-
- driver_sqlite_transaction_begin,
- driver_sqlite_transaction_commit,
- driver_sqlite_transaction_commit_s,
- driver_sqlite_transaction_rollback,
- driver_sqlite_update
+ MEMBER(v) {
+ driver_sqlite_init_v,
+ driver_sqlite_deinit_v,
+ driver_sqlite_get_flags,
+ driver_sqlite_connect,
+ driver_sqlite_escape_string,
+ driver_sqlite_exec,
+ driver_sqlite_query,
+ driver_sqlite_query_s,
+
+ driver_sqlite_transaction_begin,
+ driver_sqlite_transaction_commit,
+ driver_sqlite_transaction_commit_s,
+ driver_sqlite_transaction_rollback,
+ driver_sqlite_update
+ }
};
struct sql_result driver_sqlite_result = {
diff -r bd886e12aaa0 -r 46c3e1ee196f src/lib-sql/sql-api-private.h
--- a/src/lib-sql/sql-api-private.h Sat Sep 22 18:33:02 2007 +0300
+++ b/src/lib-sql/sql-api-private.h Sat Sep 22 19:01:19 2007 +0300
@@ -2,10 +2,19 @@
#define SQL_API_PRIVATE_H
#include "sql-api.h"
+#include "module-context.h"
-struct sql_db {
- const char *name;
+struct sql_db_module_register {
+ unsigned int id;
+};
+union sql_db_module_context {
+ struct sql_db_module_register *reg;
+};
+
+extern struct sql_db_module_register sql_db_module_register;
+
+struct sql_db_vfuncs {
struct sql_db *(*init)(const char *connect_string);
void (*deinit)(struct sql_db *db);
@@ -27,6 +36,12 @@ struct sql_db {
void (*transaction_rollback)(struct sql_transaction_context *ctx);
void (*update)(struct sql_transaction_context *ctx, const char *query);
+};
+
+struct sql_db {
+ const char *name;
+ struct sql_db_vfuncs v;
+ ARRAY_DEFINE(module_contexts, union sql_db_module_context *);
};
struct sql_result_vfuncs {
diff -r bd886e12aaa0 -r 46c3e1ee196f src/lib-sql/sql-api.c
--- a/src/lib-sql/sql-api.c Sat Sep 22 18:33:02 2007 +0300
+++ b/src/lib-sql/sql-api.c Sat Sep 22 19:01:19 2007 +0300
@@ -42,52 +42,60 @@ struct sql_db *sql_init(const char *db_d
{
const struct sql_db *const *drivers;
unsigned int i, count;
+ struct sql_db *db;
drivers = array_get(&sql_drivers, &count);
for (i = 0; i < count; i++) {
- if (strcmp(db_driver, drivers[i]->name) == 0)
- return drivers[i]->init(connect_string);
+ if (strcmp(db_driver, drivers[i]->name) == 0) {
+ db = drivers[i]->v.init(connect_string);
+ i_array_init(&db->module_contexts, 5);
+ return db;
+ }
}
i_fatal("Unknown database driver '%s'", db_driver);
}
-void sql_deinit(struct sql_db **db)
-{
- (*db)->deinit(*db);
- *db = NULL;
+void sql_deinit(struct sql_db **_db)
+{
+ struct sql_db *db = *_db;
+
+ *_db = NULL;
+ db->v.deinit(db);
+ array_free(&db->module_contexts);
+ i_free(db);
}
enum sql_db_flags sql_get_flags(struct sql_db *db)
{
- return db->get_flags(db);
+ return db->v.get_flags(db);
}
int sql_connect(struct sql_db *db)
{
- return db->connect(db);
+ return db->v.connect(db);
}
const char *sql_escape_string(struct sql_db *db, const char *string)
{
- return db->escape_string(db, string);
+ return db->v.escape_string(db, string);
}
void sql_exec(struct sql_db *db, const char *query)
{
- db->exec(db, query);
+ db->v.exec(db, query);
}
#undef sql_query
void sql_query(struct sql_db *db, const char *query,
sql_query_callback_t *callback, void *context)
{
- db->query(db, query, callback, context);
+ db->v.query(db, query, callback, context);
}
struct sql_result *sql_query_s(struct sql_db *db, const char *query)
{
- return db->query_s(db, query);
+ return db->v.query_s(db, query);
}
void sql_result_free(struct sql_result *result)
@@ -277,7 +285,7 @@ sql_result_not_connected_get_error(struc
struct sql_transaction_context *sql_transaction_begin(struct sql_db *db)
{
- return db->transaction_begin(db);
+ return db->v.transaction_begin(db);
}
#undef sql_transaction_commit
@@ -287,7 +295,7 @@ void sql_transaction_commit(struct sql_t
struct sql_transaction_context *ctx = *_ctx;
*_ctx = NULL;
- ctx->db->transaction_commit(ctx, callback, context);
+ ctx->db->v.transaction_commit(ctx, callback, context);
}
int sql_transaction_commit_s(struct sql_transaction_context **_ctx,
@@ -296,7 +304,7 @@ int sql_transaction_commit_s(struct sql_
More information about the dovecot-cvs
mailing list