mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-06 12:36:58 +00:00
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
This commit is contained in:
@@ -461,7 +461,7 @@ struct odbc_cache_tables *ast_odbc_find_table(const char *database, const char *
|
|||||||
SQLLEN sqlptr;
|
SQLLEN sqlptr;
|
||||||
SQLHSTMT stmt = NULL;
|
SQLHSTMT stmt = NULL;
|
||||||
int res = 0, error = 0, try = 0;
|
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_RDLOCK(&odbc_tables);
|
||||||
AST_RWLIST_TRAVERSE(&odbc_tables, tableptr, list) {
|
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) {
|
if (tableptr) {
|
||||||
AST_RWLIST_RDLOCK(&tableptr->columns);
|
AST_RWLIST_RDLOCK(&tableptr->columns);
|
||||||
AST_RWLIST_UNLOCK(&odbc_tables);
|
AST_RWLIST_UNLOCK(&odbc_tables);
|
||||||
if (obj) {
|
|
||||||
ast_odbc_release_obj(obj);
|
|
||||||
}
|
|
||||||
return tableptr;
|
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_log(LOG_WARNING, "Unable to retrieve database handle for table description '%s@%s'\n", tablename, database);
|
||||||
AST_RWLIST_UNLOCK(&odbc_tables);
|
AST_RWLIST_UNLOCK(&odbc_tables);
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -564,9 +561,7 @@ struct odbc_cache_tables *ast_odbc_find_table(const char *database, const char *
|
|||||||
destroy_table_cache(tableptr);
|
destroy_table_cache(tableptr);
|
||||||
tableptr = NULL;
|
tableptr = NULL;
|
||||||
}
|
}
|
||||||
if (obj) {
|
|
||||||
ast_odbc_release_obj(obj);
|
ast_odbc_release_obj(obj);
|
||||||
}
|
|
||||||
return tableptr;
|
return tableptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user