Add support for #include, var_metric, and cat_metric in res_config_sqlite
authorRussell Bryant <russell@russellbryant.com>
Mon, 17 Sep 2007 20:24:50 +0000 (20:24 +0000)
committerRussell Bryant <russell@russellbryant.com>
Mon, 17 Sep 2007 20:24:50 +0000 (20:24 +0000)
(closes issue #10738, rbraun_proformatique)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@82679 65c4cc65-6c06-0410-ace0-fbb531ad65f3

doc/res_config_sqlite.txt
res/res_config_sqlite.c

index 9f17944..39d3152 100644 (file)
@@ -15,6 +15,8 @@
  */
 CREATE TABLE ast_config (
        id              INTEGER,
+       cat_metric      INT(11)         NOT NULL        DEFAULT 0,
+       var_metric      INT(11)         NOT NULL        DEFAULT 0,
        commented       TINYINT(1)      NOT NULL        DEFAULT 0,
        filename        VARCHAR(128)    NOT NULL        DEFAULT '',
        category        VARCHAR(128)    NOT NULL        DEFAULT 'default',
@@ -23,8 +25,9 @@ CREATE TABLE ast_config (
        PRIMARY KEY     (id)
 );
 
+CREATE INDEX ast_config__idx__cat_metric               ON ast_config(cat_metric);
+CREATE INDEX ast_config__idx__var_metric               ON ast_config(var_metric);
 CREATE INDEX ast_config__idx__filename_commented       ON ast_config(filename, commented);
-CREATE INDEX ast_config__idx__category                 ON ast_config(category);
 
 /*
  * CDR table (this table is automatically created if non existent).
index 3cfb416..7736815 100644 (file)
 
 enum {
        RES_CONFIG_SQLITE_CONFIG_ID,
+       RES_CONFIG_SQLITE_CONFIG_CAT_METRIC,
+       RES_CONFIG_SQLITE_CONFIG_VAR_METRIC,
        RES_CONFIG_SQLITE_CONFIG_COMMENTED,
        RES_CONFIG_SQLITE_CONFIG_FILENAME,
        RES_CONFIG_SQLITE_CONFIG_CATEGORY,
@@ -184,6 +186,7 @@ struct cfg_entry_args {
        struct ast_config *cfg;
        struct ast_category *cat;
        char *cat_name;
+       struct ast_flags flags;
 };
 
 /*!
@@ -589,7 +592,7 @@ static char *sql_get_config_table =
 "SELECT *"
 "      FROM '%q'"
 "      WHERE filename = '%q' AND commented = 0"
-"      ORDER BY category;";
+"      ORDER BY cat_metric ASC, var_metric ASC;";
 
 static int set_var(char **var, char *name, char *value)
 {
@@ -715,6 +718,22 @@ static int add_cfg_entry(void *arg, int argc, char **argv, char **columnNames)
 
        args = arg;
 
+       if (!strcmp(argv[RES_CONFIG_SQLITE_CONFIG_VAR_NAME], "#include")) {
+               struct ast_config *cfg;
+               char *val;
+
+               val = argv[RES_CONFIG_SQLITE_CONFIG_VAR_VAL];
+               cfg = ast_config_internal_load(val, args->cfg, args->flags, "");
+
+               if (!cfg) {
+                       ast_log(LOG_WARNING, "Unable to include %s\n", val);
+                       return 1;
+               } else {
+                       args->cfg = cfg;
+                       return 0;
+               }
+       }
+
        if (!args->cat_name || strcmp(args->cat_name, argv[RES_CONFIG_SQLITE_CONFIG_CATEGORY])) {
                args->cat = ast_category_new(argv[RES_CONFIG_SQLITE_CONFIG_CATEGORY], "", 99999);
 
@@ -772,6 +791,7 @@ static struct ast_config *config_handler(const char *database,      const char *table
        args.cfg = cfg;
        args.cat = NULL;
        args.cat_name = NULL;
+       args.flags = flags;
 
        ast_mutex_lock(&mutex);