aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libstrongswan/database/database.h20
-rw-r--r--src/libstrongswan/plugins/mysql/mysql_database.c9
-rw-r--r--src/libstrongswan/plugins/sqlite/sqlite_database.c9
3 files changed, 38 insertions, 0 deletions
diff --git a/src/libstrongswan/database/database.h b/src/libstrongswan/database/database.h
index 1cf5c2542..39f909cd7 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 <utils/enumerator.h>
@@ -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 c1744c7c8..a97f23d68 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 65aa2549a..c1927b5be 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);