- DB_REPLACE capability added
authorJan Janak <jan@iptel.org>
Mon, 28 Feb 2005 18:52:32 +0000 (18:52 +0000)
committerJan Janak <jan@iptel.org>
Mon, 28 Feb 2005 18:52:32 +0000 (18:52 +0000)
db/db.c
db/db.h
db/db_cap.h

diff --git a/db/db.c b/db/db.c
index c15b61f..8b543e5 100644 (file)
--- a/db/db.c
+++ b/db/db.c
@@ -135,6 +135,11 @@ int bind_dbmod(char* mod, db_func_t* mydbf)
                dbf.cap |= DB_CAP_UPDATE;
        }
 
+       dbf.replace = (db_update_f)find_mod_export(tmp, "db_replace", 2, 0);
+       if (dbf.replace) {
+               dbf.cap |= DB_CAP_REPLACE;
+       }
+
        *mydbf=dbf; /* copy */
        return 0;
 
diff --git a/db/db.h b/db/db.h
index 31a4390..c7a3cda 100644 (file)
--- a/db/db.h
+++ b/db/db.h
@@ -132,6 +132,10 @@ typedef int (*db_delete_f) (db_con_t* _h, db_key_t* _k, db_op_t* _o, db_val_t* _
 typedef int (*db_update_f) (db_con_t* _h, db_key_t* _k, db_op_t* _o, db_val_t* _v,
                            db_key_t* _uk, db_val_t* _uv, int _n, int _un);
 
+/*
+ * Insert a row and replace if one already 
+ */
+typedef int (*db_replace_f) (db_con_t* handle, db_key_t* keys, db_val_t* vals, int n);
 
 
 typedef struct db_func {
@@ -145,6 +149,7 @@ typedef struct db_func {
        db_insert_f      insert;       /* Insert into table */
        db_delete_f      delete;       /* Delete from table */ 
        db_update_f      update;       /* Update table */
+       db_replace_f     replace;      /* Replace row in a table */
 } db_func_t;
 
 
index e8c2d08..c501c60 100644 (file)
@@ -37,12 +37,13 @@ typedef enum db_cap {
        DB_CAP_RAW_QUERY = 1 << 1,  /* Database driver can perform raw queries */
        DB_CAP_INSERT =    1 << 2,  /* Database driver can insert data into database */
        DB_CAP_DELETE =    1 << 3,  /* Database driver can delete data from database */
-       DB_CAP_UPDATE =    1 << 4   /* Database driver can update data in the database */
+       DB_CAP_UPDATE =    1 << 4,  /* Database driver can update data in the database */
+       DB_CAP_REPLACE =   1 << 5,  /* Replace (also known as INSERT OR UPDATE) support */
 } db_cap_t;
 
 
 /*
- * All database capabilities except raw_query which should be checked
+ * All database capabilities except raw_query and replace which should be checked
  * separately when needed
  */
 #define DB_CAP_ALL (DB_CAP_QUERY | DB_CAP_INSERT | DB_CAP_DELETE | DB_CAP_UPDATE)