aboutsummaryrefslogtreecommitdiffstats
path: root/res/res_config_odbc.c
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-11-24 03:07:08 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2004-11-24 03:07:08 +0000
commit858a683291052dea2930137675ae812027bc16db (patch)
treebcd0e0ca1d561867119d44cfffd88075bea9671e /res/res_config_odbc.c
parent728e18f777e12ee91e1828805e6eabfb7c6b5dc3 (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/res_config_odbc.c')
-rwxr-xr-xres/res_config_odbc.c39
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);
}
}
}