diff --git a/modules/net/dap_chain_node_cli.c b/modules/net/dap_chain_node_cli.c index ced791f17a60f3f008643fd9f82a7e8b4e22e436..000cfb73c1ab10ac299de607368e026a4a3718f5 100644 --- a/modules/net/dap_chain_node_cli.c +++ b/modules/net/dap_chain_node_cli.c @@ -84,6 +84,9 @@ int dap_chain_node_cli_init(dap_config_t * g_config) dap_cli_server_cmd_add("global_db", com_global_db, "Work with global database", "global_db cells add -cell <cell id> \n" "global_db flush \n\n" + "global_db write -group <group_name> -key <key_name> -value <value>" + "global_db read -group <group_name> -key <key_name>" + "global_db delete -group <group_name> -key <key_name>" // "global_db wallet_info set -addr <wallet address> -cell <cell id> \n\n" ); dap_cli_server_cmd_add("mempool", com_signer, "Sign operations", diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 09e8f4c7673b85efda3d8de62ad2aba1a3ae21e0..a412d74d503cf90299b36a3c0efc8bfb9ae5f7be 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -726,7 +726,7 @@ static int node_info_dump_with_reply(dap_chain_net_t * a_net, dap_chain_node_add int com_global_db(int a_argc, char ** a_argv, char **a_str_reply) { enum { - CMD_NONE, CMD_NAME_CELL, CMD_ADD, CMD_FLUSH, CMD_RECORD + CMD_NONE, CMD_NAME_CELL, CMD_ADD, CMD_FLUSH, CMD_RECORD, CMD_WRITE, CMD_READ, CMD_DELETE }; int arg_index = 1; int cmd_name = CMD_NONE; @@ -737,6 +737,12 @@ int com_global_db(int a_argc, char ** a_argv, char **a_str_reply) cmd_name = CMD_FLUSH; else if(dap_cli_server_cmd_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "record", NULL)) cmd_name = CMD_RECORD; + else if(dap_chain_node_cli_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "write", NULL)) + cmd_name = CMD_WRITE; + else if(dap_chain_node_cli_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "read", NULL)) + cmd_name = CMD_READ; + else if(dap_chain_node_cli_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "delete", NULL)) + cmd_name = CMD_DELETE; switch (cmd_name) { case CMD_NAME_CELL: { @@ -923,6 +929,98 @@ int com_global_db(int a_argc, char ** a_argv, char **a_str_reply) DAP_DELETE(l_value); return l_ret; } + case CMD_WRITE: + { + char *l_group_str = NULL; + char *l_key_str = NULL; + char *l_value_str = NULL; + + dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-group", &l_group_str); + dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-key", &l_key_str); + dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-value", &l_value_str); + + if(!l_group_str) { + dap_chain_node_cli_set_reply_text(a_str_reply, "%s requires parameter 'group' to be valid", a_argv[0]); + return -120; + } + + if(!l_key_str) { + dap_chain_node_cli_set_reply_text(a_str_reply, "%s requires parameter 'key' to be valid", a_argv[0]); + return -121; + } + + if(!l_value_str) { + dap_chain_node_cli_set_reply_text(a_str_reply, "%s requires parameter 'value' to be valid", a_argv[0]); + return -122; + } + + if(dap_chain_global_db_gr_set(l_key_str, l_value_str, strlen(l_value_str), l_group_str)) + { + dap_chain_node_cli_set_reply_text(a_str_reply, "Data has been successfully written to the database"); + return 0; + }else{ + dap_chain_node_cli_set_reply_text(a_str_reply, "Data writing is failed"); + return -124; + } + + } + case CMD_READ: + { + char *l_group_str = NULL; + char *l_key_str = NULL; + + dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-group", &l_group_str); + dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-key", &l_key_str); + + if(!l_group_str) { + dap_chain_node_cli_set_reply_text(a_str_reply, "%s requires parameter 'group' to be valid", a_argv[0]); + return -120; + } + + if(!l_key_str) { + dap_chain_node_cli_set_reply_text(a_str_reply, "%s requires parameter 'key' to be valid", a_argv[0]); + return -122; + } + + size_t l_out_len = 0; + uint8_t *l_value_out = dap_chain_global_db_gr_get(l_key_str, &l_out_len, l_group_str); + + if (!l_value_out || !l_out_len) + { + dap_chain_node_cli_set_reply_text(a_str_reply, "Record with key %s in group %s not found", l_key_str, l_group_str); + return -121; + } + + dap_chain_node_cli_set_reply_text(a_str_reply, "Group %s, key %s, data:\n %s", l_group_str, l_key_str, (char*)l_value_out); + return 0; + } + case CMD_DELETE: + { + char *l_group_str = NULL; + char *l_key_str = NULL; + + dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-group", &l_group_str); + dap_chain_node_cli_find_option_val(a_argv, arg_index, a_argc, "-key", &l_key_str); + + if(!l_group_str) { + dap_chain_node_cli_set_reply_text(a_str_reply, "%s requires parameter 'group' to be valid", a_argv[0]); + return -120; + } + + if(!l_key_str) { + dap_chain_node_cli_set_reply_text(a_str_reply, "%s requires parameter 'key' to be valid", a_argv[0]); + return -121; + } + + if (dap_chain_global_db_gr_del(l_key_str, l_group_str)) + { + dap_chain_node_cli_set_reply_text(a_str_reply, "Record with key %s in group %s was deleted successfuly", l_key_str, l_group_str); + return 0; + }else{ + dap_chain_node_cli_set_reply_text(a_str_reply, "Record with key %s in group %s deleting failed", l_group_str, l_key_str); + return -122; + } + } default: dap_cli_server_cmd_set_reply_text(a_str_reply, "parameters are not valid"); return -1;