From 17247daae6c5054c0880f1858d1f0de46cef85d1 Mon Sep 17 00:00:00 2001 From: Matthew Jordan <mjordan@digium.com> Date: Mon, 9 Feb 2015 02:35:31 +0000 Subject: [PATCH] res/res_odbc: Remove unneeded queries when determining if a table exists This patch modifies the ast_odbc_find_table function such that it only performs a lookup of the requested table if the table is not already known. Prior to this patch, a queries would be executed against the database even if the table was already known and cached. Review: https://reviewboard.asterisk.org/r/4405/ ASTERISK-24742 #close Reported by: ibercom patches: patch.diff uploaded by ibercom (License 6599) ........ Merged revisions 431617 from http://svn.asterisk.org/svn/asterisk/branches/11 ........ Merged revisions 431618 from http://svn.asterisk.org/svn/asterisk/branches/13 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431619 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- res/res_odbc.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/res/res_odbc.c b/res/res_odbc.c index d029c88c0a..259467ace4 100644 --- a/res/res_odbc.c +++ b/res/res_odbc.c @@ -461,7 +461,7 @@ struct odbc_cache_tables *ast_odbc_find_table(const char *database, const char * SQLLEN sqlptr; SQLHSTMT stmt = NULL; int res = 0, error = 0, try = 0; - struct odbc_obj *obj = ast_odbc_request_obj(database, 0); + struct odbc_obj *obj; AST_RWLIST_RDLOCK(&odbc_tables); AST_RWLIST_TRAVERSE(&odbc_tables, tableptr, list) { @@ -472,13 +472,10 @@ struct odbc_cache_tables *ast_odbc_find_table(const char *database, const char * if (tableptr) { AST_RWLIST_RDLOCK(&tableptr->columns); AST_RWLIST_UNLOCK(&odbc_tables); - if (obj) { - ast_odbc_release_obj(obj); - } return tableptr; } - if (!obj) { + if (!(obj = ast_odbc_request_obj(database, 0))) { ast_log(LOG_WARNING, "Unable to retrieve database handle for table description '%s@%s'\n", tablename, database); AST_RWLIST_UNLOCK(&odbc_tables); return NULL; @@ -564,9 +561,7 @@ struct odbc_cache_tables *ast_odbc_find_table(const char *database, const char * destroy_table_cache(tableptr); tableptr = NULL; } - if (obj) { - ast_odbc_release_obj(obj); - } + ast_odbc_release_obj(obj); return tableptr; } -- GitLab