fixup completion some more

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@15903 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Anthony Minessale 2009-12-11 05:14:23 +00:00
parent a4da5e5833
commit d228451831
1 changed files with 25 additions and 13 deletions

View File

@ -560,7 +560,7 @@ static int comp_callback(void *pArg, int argc, char **argv, char **columnNames)
static unsigned char complete(EditLine * el, int ch)
{
switch_cache_db_handle_t *db = NULL;
char *sql;
char *sql = NULL;
const LineInfo *lf = el_line(el);
char *dup = strdup(lf->buffer);
char *buf = dup;
@ -568,11 +568,20 @@ static unsigned char complete(EditLine * el, int ch)
char *errmsg = NULL;
struct helper h = { el };
unsigned char ret = CC_REDISPLAY;
int pos = 0;
switch_core_db_handle(&db);
if (!zstr(lf->cursor) && !zstr(lf->buffer)) {
pos = (lf->cursor - lf->buffer);
}
h.out = switch_core_get_console();
if (pos > 0) {
*(buf + pos) = '\0';
}
if ((p = strchr(buf, '\r')) || (p = strchr(buf, '\n'))) {
*p = '\0';
}
@ -593,27 +602,31 @@ static unsigned char complete(EditLine * el, int ch)
}
h.len = strlen(buf);
fprintf(h.out, "\n\n");
if (h.words == 0) {
sql = switch_mprintf("select distinct name from interfaces where type='api' and name like '%q%%' and hostname='%q' order by name",
buf, switch_core_get_variable("hostname"));
} else {
} else if (h.words == 1) {
sql = switch_mprintf("select distinct uuid from channels where uuid like '%q%%' and hostname='%q' order by uuid",
buf, switch_core_get_variable("hostname"));
}
switch_cache_db_execute_sql_callback(db, sql, comp_callback, &h, &errmsg);
if (sql) {
switch_cache_db_execute_sql_callback(db, sql, comp_callback, &h, &errmsg);
if (errmsg) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "error [%s][%s]\n", sql, errmsg);
free(errmsg);
ret = CC_ERROR;
goto end;
if (errmsg) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "error [%s][%s]\n", sql, errmsg);
free(errmsg);
ret = CC_ERROR;
goto end;
}
free(sql);
sql = NULL;
}
if (h.hits != 1) {
if (h.hits != -1) {
char *dupdup = strdup(dup);
int x, argc = 0;
char *argv[10] = { 0 };
@ -648,9 +661,8 @@ static unsigned char complete(EditLine * el, int ch)
}
stream.write_function(&stream, " and hostname='%s'", switch_core_get_variable("hostname"));
switch_cache_db_execute_sql_callback(db, stream.data, comp_callback, &h, &errmsg);
if (errmsg) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "error [%s][%s]\n", (char *) stream.data, errmsg);
free(errmsg);