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