Realtime improvements
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@4314 f38db490-d61c-443f-a65b-d21fe96a405b
This commit is contained in:
parent
2c475b6f0e
commit
6435562160
|
@ -87,9 +87,24 @@ static struct ast_variable *realtime_switch_common(const char *table, const char
|
|||
{
|
||||
struct ast_variable *var;
|
||||
char pri[20];
|
||||
char *ematch;
|
||||
char rexten[AST_MAX_EXTENSION + 20]="";
|
||||
snprintf(pri, sizeof(pri), "%d", priority);
|
||||
printf("%s/%s/%s/%s exists\n", table, context, exten, pri);
|
||||
var = ast_load_realtime(table, "context", context, "exten", exten, "priority", pri, NULL);
|
||||
switch(mode) {
|
||||
case MODE_MATCHMORE:
|
||||
ematch = "exten LIKE";
|
||||
snprintf(rexten, sizeof(rexten), "%s_%%", exten);
|
||||
break;
|
||||
case MODE_CANMATCH:
|
||||
ematch = "exten LIKE";
|
||||
snprintf(rexten, sizeof(rexten), "%s%%", exten);
|
||||
break;
|
||||
case MODE_MATCH:
|
||||
default:
|
||||
ematch = "exten";
|
||||
strncpy(rexten, exten, sizeof(rexten) - 1);
|
||||
}
|
||||
var = ast_load_realtime(table, "context", context, ematch, rexten, "priority", pri, NULL);
|
||||
return var;
|
||||
}
|
||||
|
||||
|
@ -143,6 +158,8 @@ static int realtime_matchmore(struct ast_channel *chan, const char *context, con
|
|||
{
|
||||
REALTIME_COMMON(MODE_MATCHMORE);
|
||||
if (var) ast_destroy_realtime(var);
|
||||
if (var)
|
||||
res = 1;
|
||||
return res > 0 ? res : 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -31,19 +31,6 @@ STANDARD_LOCAL_USER;
|
|||
|
||||
LOCAL_USER_DECL;
|
||||
|
||||
static void parseop(char *newp, int newplen, char **opo, const char *newparam)
|
||||
{
|
||||
char *op;
|
||||
strncpy(newp, newparam, newplen - 1);
|
||||
op = strchr(newp, ' ');
|
||||
if (op) {
|
||||
*op = '\0';
|
||||
op++;
|
||||
} else
|
||||
op = "=";
|
||||
*opo = op;
|
||||
}
|
||||
|
||||
static struct ast_variable *realtime_odbc(const char *database, const char *table, va_list ap)
|
||||
{
|
||||
odbc_obj *obj;
|
||||
|
@ -51,7 +38,6 @@ static struct ast_variable *realtime_odbc(const char *database, const char *tabl
|
|||
char sql[1024];
|
||||
char coltitle[256];
|
||||
char rowdata[2048];
|
||||
char newp[256];
|
||||
char *op;
|
||||
const char *newparam, *newval;
|
||||
char *stringp;
|
||||
|
@ -90,15 +76,14 @@ static struct ast_variable *realtime_odbc(const char *database, const char *tabl
|
|||
return NULL;
|
||||
}
|
||||
newval = va_arg(aq, const char *);
|
||||
parseop(newp, sizeof(newp), &op, newparam);
|
||||
snprintf(sql, sizeof(sql), "SELECT * FROM %s WHERE %s %s ?", table, newp, op);
|
||||
if (!strchr(newparam, ' ')) op = " ="; else op = "";
|
||||
snprintf(sql, sizeof(sql), "SELECT * FROM %s WHERE %s%s ?", table, newparam, op);
|
||||
while((newparam = va_arg(aq, const char *))) {
|
||||
parseop(newp, sizeof(newp), &op, newparam);
|
||||
snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), " AND %s %s ?", newparam, op);
|
||||
if (!strchr(newparam, ' ')) op = " ="; else op = "";
|
||||
snprintf(sql + strlen(sql), sizeof(sql) - strlen(sql), " AND %s%s ?", newparam, op);
|
||||
newval = va_arg(aq, const char *);
|
||||
}
|
||||
va_end(aq);
|
||||
|
||||
res = SQLPrepare(stmt, sql, SQL_NTS);
|
||||
if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
|
||||
ast_log(LOG_WARNING, "SQL Prepare failed![%s]\n", sql);
|
||||
|
|
Reference in New Issue