Browse Source

- DB_REPLACE capability added

Jan Janak 20 years ago
parent
commit
bd43a2a998
3 changed files with 13 additions and 2 deletions
  1. 5 0
      db/db.c
  2. 5 0
      db/db.h
  3. 3 2
      db/db_cap.h

+ 5 - 0
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;
 

+ 5 - 0
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;
 
 

+ 3 - 2
db/db_cap.h

@@ -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)