From fc861b0b7edcc80defe6053791ef8eb8147ab967 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Mon, 21 Jul 2008 11:13:06 +0000 Subject: [PATCH] added a driver type getter for database implementations --- src/libstrongswan/database/database.h | 20 ++++++++++++++++++++ src/libstrongswan/plugins/mysql/mysql_database.c | 9 +++++++++ src/libstrongswan/plugins/sqlite/sqlite_database.c | 9 +++++++++ 3 files changed, 38 insertions(+) diff --git a/src/libstrongswan/database/database.h b/src/libstrongswan/database/database.h index 1cf5c25..39f909c 100644 --- a/src/libstrongswan/database/database.h +++ b/src/libstrongswan/database/database.h @@ -22,6 +22,7 @@ #define DATABASE_H_ typedef enum db_type_t db_type_t; +typedef enum db_driver_t db_driver_t; typedef struct database_t database_t; #include @@ -44,6 +45,15 @@ enum db_type_t { DB_NULL, }; +/** + * Database implementation type. + */ +enum db_driver_t { + /** SQLite database */ + DB_SQLITE, + /** MySQL database */ + DB_MYSQL, +}; /** * Interface for a database implementation. @@ -95,6 +105,16 @@ struct database_t { int (*execute)(database_t *this, int *rowid, char *sql, ...); /** + * Get the database implementation type. + * + * To allow driver specific SQL or performance optimizations each database + * implementations can be queried for its type. + * + * @return database implementation type + */ + db_driver_t (*get_driver)(database_t *this); + + /** * Destroy a database connection. */ void (*destroy)(database_t *this); diff --git a/src/libstrongswan/plugins/mysql/mysql_database.c b/src/libstrongswan/plugins/mysql/mysql_database.c index c1744c7..a97f23d 100644 --- a/src/libstrongswan/plugins/mysql/mysql_database.c +++ b/src/libstrongswan/plugins/mysql/mysql_database.c @@ -592,6 +592,14 @@ static int execute(private_mysql_database_t *this, int *rowid, char *sql, ...) conn_release(conn); return affected; } + +/** + * Implementation of database_t.get_driver + */ +static db_driver_t get_driver(private_mysql_database_t *this) +{ + return DB_MYSQL; +} /** * Implementation of database_t.destroy @@ -672,6 +680,7 @@ mysql_database_t *mysql_database_create(char *uri) this->public.db.query = (enumerator_t* (*)(database_t *this, char *sql, ...))query; this->public.db.execute = (int (*)(database_t *this, int *rowid, char *sql, ...))execute; + this->public.db.get_driver = (db_driver_t(*)(database_t*))get_driver; this->public.db.destroy = (void(*)(database_t*))destroy; if (!parse_uri(this, uri)) diff --git a/src/libstrongswan/plugins/sqlite/sqlite_database.c b/src/libstrongswan/plugins/sqlite/sqlite_database.c index 65aa254..c1927b5 100644 --- a/src/libstrongswan/plugins/sqlite/sqlite_database.c +++ b/src/libstrongswan/plugins/sqlite/sqlite_database.c @@ -282,6 +282,14 @@ static int execute(private_sqlite_database_t *this, int *rowid, char *sql, ...) } /** + * Implementation of database_t.get_driver + */ +static db_driver_t get_driver(private_sqlite_database_t *this) +{ + return DB_SQLITE; +} + +/** * Implementation of database_t.destroy */ static void destroy(private_sqlite_database_t *this) @@ -312,6 +320,7 @@ sqlite_database_t *sqlite_database_create(char *uri) this->public.db.query = (enumerator_t* (*)(database_t *this, char *sql, ...))query; this->public.db.execute = (int (*)(database_t *this, int *rowid, char *sql, ...))execute; + this->public.db.get_driver = (db_driver_t(*)(database_t*))get_driver; this->public.db.destroy = (void(*)(database_t*))destroy; this->mutex = mutex_create(MUTEX_RECURSIVE); -- 2.7.4