diff --git a/global-db/dap_global_db.c b/global-db/dap_global_db.c index 17f0519a5a6bc92ca9addba558679191d98f6652..cb4dde542ce947b2d85728c23ecd3568c7909867 100644 --- a/global-db/dap_global_db.c +++ b/global-db/dap_global_db.c @@ -1319,7 +1319,7 @@ int dap_global_db_unpin(const char *a_group, const char *a_key, dap_global_db_ca * @param a_key * @return */ -static int s_del_sync_with_dbi(dap_global_db_instance_t *a_dbi, const char *a_group, const char *a_key) +static int s_del_sync_with_dbi_ex(dap_global_db_instance_t *a_dbi, const char *a_group, const char *a_key, const char * a_value, size_t a_value_len) { dap_store_obj_t l_store_obj = { .key = (char*)a_key, @@ -1327,6 +1327,12 @@ static int s_del_sync_with_dbi(dap_global_db_instance_t *a_dbi, const char *a_gr .flags = DAP_GLOBAL_DB_RECORD_NEW | (a_key ? DAP_GLOBAL_DB_RECORD_DEL : DAP_GLOBAL_DB_RECORD_ERASE), .timestamp = dap_nanotime_now() }; + + if (a_value) { + l_store_obj.value = (byte_t*)a_value; + l_store_obj.value_len = a_value_len; + } + if (a_key) l_store_obj.sign = dap_store_obj_sign(&l_store_obj, a_dbi->signing_key, &l_store_obj.crc); @@ -1344,12 +1350,23 @@ static int s_del_sync_with_dbi(dap_global_db_instance_t *a_dbi, const char *a_gr return l_res; } +static int s_del_sync_with_dbi(dap_global_db_instance_t *a_dbi, const char *a_group, const char *a_key) { + return s_del_sync_with_dbi_ex(a_dbi, a_group, a_key, NULL, 0); +} + inline int dap_global_db_del_sync(const char *a_group, const char *a_key) { dap_return_val_if_fail(s_dbi && a_group, DAP_GLOBAL_DB_RC_ERROR); return s_del_sync_with_dbi(s_dbi, a_group, a_key); } +inline int dap_global_db_del_sync_ex(const char *a_group, const char *a_key, const char * a_value, size_t a_value_len) +{ + dap_return_val_if_fail(s_dbi && a_group, DAP_GLOBAL_DB_RC_ERROR); + return s_del_sync_with_dbi_ex(s_dbi, a_group, a_key, a_value, a_value_len); +} + + /** * @brief dap_global_db_delete * @param a_group @@ -1358,7 +1375,8 @@ inline int dap_global_db_del_sync(const char *a_group, const char *a_key) * @param a_arg * @return */ -int dap_global_db_del(const char * a_group, const char *a_key, dap_global_db_callback_result_t a_callback, void *a_arg) +int dap_global_db_del_ex(const char * a_group, const char *a_key, const void * a_value, + const size_t a_value_len, dap_global_db_callback_result_t a_callback, void *a_arg) { dap_return_val_if_fail(s_dbi && a_group, DAP_GLOBAL_DB_RC_ERROR); struct queue_io_msg *l_msg = DAP_NEW_Z_RET_VAL_IF_FAIL(struct queue_io_msg, DAP_GLOBAL_DB_RC_CRITICAL); @@ -1368,6 +1386,10 @@ int dap_global_db_del(const char * a_group, const char *a_key, dap_global_db_cal l_msg->key = dap_strdup(a_key); l_msg->callback_arg = a_arg; l_msg->callback_result = a_callback; + if (a_value_len) { + l_msg->value = DAP_DUP_SIZE(a_value, a_value_len); + l_msg->value_length = a_value_len; + } int l_ret = dap_proc_thread_callback_add(NULL, s_queue_io_callback, l_msg); if (l_ret != 0) { @@ -1379,6 +1401,10 @@ int dap_global_db_del(const char * a_group, const char *a_key, dap_global_db_cal return l_ret; } +int dap_global_db_del(const char * a_group, const char *a_key, dap_global_db_callback_result_t a_callback, void *a_arg) { + return dap_global_db_del_ex(a_group, a_key, NULL, 0, a_callback, a_arg); +} + /** * @brief erase table, call dap_global_db_del_sync with NULL key * @param a_group - table name @@ -1408,7 +1434,12 @@ DAP_INLINE int dap_global_db_erase_table(const char *a_group, dap_global_db_call */ static void s_msg_opcode_delete(struct queue_io_msg * a_msg) { - int l_res = dap_global_db_del_sync(a_msg->group, a_msg->key); + int l_res = 0; + if (a_msg->value && a_msg->value_length) { + l_res = dap_global_db_del_sync_ex(a_msg->group, a_msg->key, a_msg->value, a_msg->value_length); + } else { + l_res = dap_global_db_del_sync(a_msg->group, a_msg->key); + } if(a_msg->callback_result) { a_msg->callback_result(a_msg->dbi, l_res==0 ? DAP_GLOBAL_DB_RC_SUCCESS: diff --git a/global-db/include/dap_global_db.h b/global-db/include/dap_global_db.h index 664a8e8e8f82447addef2017ffcec53179ec7799..6117f53e39b0685eb65caf0c8e226ce24cc1e047 100644 --- a/global-db/include/dap_global_db.h +++ b/global-db/include/dap_global_db.h @@ -140,6 +140,8 @@ int dap_global_db_set_raw(dap_store_obj_t *a_store_objs, size_t a_store_objs_cou int dap_global_db_pin(const char *a_group, const char *a_key, dap_global_db_callback_result_t a_callback, void *a_arg); int dap_global_db_unpin(const char *a_group, const char *a_key, dap_global_db_callback_result_t a_callback, void *a_arg); int dap_global_db_del(const char *a_group, const char *a_key, dap_global_db_callback_result_t a_callback, void *a_arg); +int dap_global_db_del_ex(const char * a_group, const char *a_key, const void * a_value, const size_t a_value_len, + dap_global_db_callback_result_t a_callback, void *a_arg); int dap_global_db_flush( dap_global_db_callback_result_t a_callback, void *a_arg); // Set multiple. In callback writes total processed objects to a_values_total and a_values_count to the a_values_count as well @@ -162,6 +164,7 @@ int dap_global_db_set_raw_sync(dap_store_obj_t *a_store_objs, size_t a_store_obj int dap_global_db_pin_sync(const char *a_group, const char *a_key); int dap_global_db_unpin_sync(const char *a_group, const char *a_key); int dap_global_db_del_sync(const char *a_group, const char *a_key); +int dap_global_db_del_sync_ex(const char *a_group, const char *a_key, const char * a_value, size_t a_value_size); int dap_global_db_flush_sync(); bool dap_global_db_isalnum_group_key(const dap_store_obj_t *a_obj, bool a_not_null_key);