diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-11-24 03:07:08 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-11-24 03:07:08 +0000 |
commit | 858a683291052dea2930137675ae812027bc16db (patch) | |
tree | bcd0e0ca1d561867119d44cfffd88075bea9671e /res | |
parent | 728e18f777e12ee91e1828805e6eabfb7c6b5dc3 (diff) |
Make realtime pbx understand patterns.
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@4326 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'res')
-rwxr-xr-x | res/res_config_odbc.c | 39 |
1 files changed, 24 insertions, 15 deletions
diff --git a/res/res_config_odbc.c b/res/res_config_odbc.c index 786e14bca..96d5aacd3 100755 --- a/res/res_config_odbc.c +++ b/res/res_config_odbc.c @@ -174,6 +174,8 @@ static struct ast_config *realtime_multi_odbc(const char *database, const char * char sql[1024]; char coltitle[256]; char rowdata[2048]; + char *title=NULL; + const char *initfield=NULL; char *op; const char *newparam, *newval; char *stringp; @@ -213,6 +215,9 @@ static struct ast_config *realtime_multi_odbc(const char *database, const char * SQLFreeHandle (SQL_HANDLE_STMT, stmt); return NULL; } + initfield = ast_strdupa(newparam); + if (initfield && (op = strchr(initfield, ' '))) + *op = '\0'; newval = va_arg(aq, const char *); if (!strchr(newparam, ' ')) op = " ="; else op = ""; snprintf(sql, sizeof(sql), "SELECT * FROM %s WHERE %s%s ?", table, newparam, op); @@ -221,6 +226,8 @@ static struct ast_config *realtime_multi_odbc(const char *database, const char * snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), " AND %s%s ?", newparam, op); newval = va_arg(aq, const char *); } + if (initfield) + snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), " ORDER BY %s", initfield); va_end(aq); res = SQLPrepare(stmt, sql, SQL_NTS); if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) { @@ -259,7 +266,7 @@ static struct ast_config *realtime_multi_odbc(const char *database, const char * return NULL; } - while (rowcount) { + while (rowcount--) { var = NULL; prev = NULL; res = SQLFetch(stmt); @@ -289,6 +296,8 @@ static struct ast_config *realtime_multi_odbc(const char *database, const char * while(stringp) { chunk = strsep(&stringp, ";"); if (chunk && !ast_strlen_zero(ast_strip(chunk))) { + if (initfield && !strcmp(initfield, coltitle) && !title) + title = ast_strdupa(chunk); if (prev) { prev->next = ast_new_variable(coltitle, chunk); if (prev->next) @@ -298,20 +307,20 @@ static struct ast_config *realtime_multi_odbc(const char *database, const char * } } - if (var) { - cat = ast_new_category(""); - if (cat) { - cat->root = var; - if (!cfg) - cfg = ast_new_config(); - if (cfg) - ast_category_append(cfg, cat); - else - ast_category_destroy(cat); - } else { - ast_log(LOG_WARNING, "Out of memory!\n"); - ast_destroy_realtime(var); - } + } + if (var) { + cat = ast_new_category(title ? title : ""); + if (cat) { + cat->root = var; + if (!cfg) + cfg = ast_new_config(); + if (cfg) + ast_category_append(cfg, cat); + else + ast_category_destroy(cat); + } else { + ast_log(LOG_WARNING, "Out of memory!\n"); + ast_destroy_realtime(var); } } } |