added a driver type getter for database implementations
authorMartin Willi <martin@strongswan.org>
Mon, 21 Jul 2008 11:13:06 +0000 (11:13 -0000)
committerMartin Willi <martin@strongswan.org>
Mon, 21 Jul 2008 11:13:06 +0000 (11:13 -0000)
src/libstrongswan/database/database.h
src/libstrongswan/plugins/mysql/mysql_database.c
src/libstrongswan/plugins/sqlite/sqlite_database.c

index 1cf5c25..39f909c 100644 (file)
@@ -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);
index c1744c7..a97f23d 100644 (file)
@@ -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))
index 65aa254..c1927b5 100644 (file)
@@ -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);