[asterisk-commits] trunk r30241 - in /trunk: apps/app_db.c
funcs/func_db.c
asterisk-commits at lists.digium.com
asterisk-commits at lists.digium.com
Thu May 25 08:40:38 MST 2006
Author: russell
Date: Thu May 25 10:40:38 2006
New Revision: 30241
URL: http://svn.digium.com/view/asterisk?rev=30241&view=rev
Log:
add DB_DELETE function for the common case of retrieving and deleting a key in
a single operation (issue #7214, twilson)
Modified:
trunk/apps/app_db.c
trunk/funcs/func_db.c
Modified: trunk/apps/app_db.c
URL: http://svn.digium.com/view/asterisk/trunk/apps/app_db.c?rev=30241&r1=30240&r2=30241&view=diff
==============================================================================
--- trunk/apps/app_db.c (original)
+++ trunk/apps/app_db.c Thu May 25 10:40:38 2006
@@ -48,9 +48,11 @@
#include "asterisk/lock.h"
#include "asterisk/options.h"
+/*! \todo XXX Remove this application after 1.4 is relased */
static char *d_descrip =
" DBdel(family/key): This applicaiton will delete a key from the Asterisk\n"
-"database.\n";
+"database.\n"
+" This application has been DEPRECATED in favor of the DB_DELETE function.\n";
static char *dt_descrip =
" DBdeltree(family[/keytree]): This application will delete a family or keytree\n"
@@ -109,8 +111,14 @@
{
char *argv, *family, *key;
struct localuser *u;
+ static int deprecation_warning = 0;
LOCAL_USER_ADD(u);
+
+ if (!deprecation_warning) {
+ deprecation_warning = 1;
+ ast_log(LOG_WARNING, "The DBdel application has been deprecated in favor of the DB_DELETE dialplan function!\n");
+ }
argv = ast_strdupa(data);
Modified: trunk/funcs/func_db.c
URL: http://svn.digium.com/view/asterisk/trunk/funcs/func_db.c?rev=30241&r1=30240&r2=30241&view=diff
==============================================================================
--- trunk/funcs/func_db.c (original)
+++ trunk/funcs/func_db.c Thu May 25 10:40:38 2006
@@ -159,6 +159,53 @@
.read = function_db_exists,
};
+static int function_db_delete(struct ast_channel *chan, char* cmd,
+ char *parse, char *buf, size_t len)
+{
+ AST_DECLARE_APP_ARGS(args,
+ AST_APP_ARG(family);
+ AST_APP_ARG(key);
+ );
+
+ buf[0] = '\0';
+
+ if (ast_strlen_zero(parse)) {
+ ast_log(LOG_WARNING, "DB_DELETE requires an argument, DB_DELETE(<family>/<key>)\n");
+ return -1;
+ }
+
+ AST_NONSTANDARD_APP_ARGS(args, parse, '/');
+
+ if (args.argc < 2) {
+ ast_log(LOG_WARNING, "DB_DELETE requires an argument, DB_DELETE(<family>/<key>)\n");
+ return -1;
+ }
+
+ if (ast_db_get(args.family, args.key, buf, len - 1)) {
+ ast_log(LOG_DEBUG, "DB_DELETE: %s/%s not found in database.\n", args.family, args.key);
+ } else {
+ if (ast_db_del(args.family, args.key)) {
+ ast_log(LOG_DEBUG, "DB_DELETE: %s/%s could not be deleted from the database\n",
+ args.family, args.key);
+ }
+ }
+ pbx_builtin_setvar_helper(chan, "DB_RESULT", buf);
+
+ return 0;
+}
+
+
+static struct ast_custom_function db_delete_function = {
+ .name = "DB_DELETE",
+ .synopsis = "Return a value from the database and delete it",
+ .syntax = "DB_DELETE(<family>/<key>)",
+ .desc =
+ "This function will retrieve a value from the Asterisk database\n"
+ " and then remove that key from the database. DB_RESULT\n"
+ "will be set to the key's value if it exists.\n",
+ .read = function_db_delete,
+};
+
static char *tdesc = "Database (astdb) related dialplan functions";
static int unload_module(void *mod)
@@ -167,6 +214,7 @@
res |= ast_custom_function_unregister(&db_function);
res |= ast_custom_function_unregister(&db_exists_function);
+ res |= ast_custom_function_unregister(&db_delete_function);
return res;
}
@@ -177,6 +225,7 @@
res |= ast_custom_function_register(&db_function);
res |= ast_custom_function_register(&db_exists_function);
+ res |= ast_custom_function_register(&db_delete_function);
return res;
}
More information about the asterisk-commits
mailing list