Make realtime pbx understand patterns.

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@4326 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Mark Spencer
2004-11-24 03:07:08 +00:00
parent 2a1bf5efd9
commit 8f2b687a95
4 changed files with 63 additions and 24 deletions

View File

@@ -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);
}
}
}