Changeset 16694 for trunk/psLib/src/db/psDB.c
- Timestamp:
- Feb 27, 2008, 3:25:44 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/psLib/src/db/psDB.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/psLib/src/db/psDB.c
r15615 r16694 23 23 * 4.1.2 or newer is required. 24 24 * 25 * $Id: psDB.c,v 1.14 8 2007-11-14 02:43:09jhoblitt Exp $25 * $Id: psDB.c,v 1.149 2008-02-28 01:25:44 jhoblitt Exp $ 26 26 */ 27 27 … … 78 78 } 79 79 psDBMysqlRow; 80 81 // cache of prepared query statements 82 static pthread_mutex_t preparedQueryMutex = PTHREAD_MUTEX_INITIALIZER; 83 static psHash *preparedQuery = NULL; 80 84 81 85 static pthread_mutex_t lookupTableMutex = PTHREAD_MUTEX_INITIALIZER; … … 852 856 psString query = NULL; 853 857 858 // start lock on query cache 859 if (psMemGetThreadSafety()) { 860 pthread_mutex_lock(&preparedQueryMutex); 861 } 862 863 // initalize the prepared query cache 864 if (!preparedQuery) { 865 preparedQuery = psHashAlloc(10); 866 } 867 854 868 // generate query string 855 869 va_list ap; … … 860 874 psTrace("psLib.db", PS_LOG_INFO, "Preparing SQL:\n%s", query); 861 875 862 // Prepare SQL statement863 MYSQL_STMT *stmt = mysql_stmt_init(dbh->mysql);876 // check the query cache 877 MYSQL_STMT *stmt = psHashLookup(preparedQuery, query); 864 878 if (!stmt) { 865 psAbort("mysql_stmt_init(), out of memory."); 866 } 867 if (mysql_stmt_prepare(stmt, query, (unsigned long)strlen(query))) { 868 psError(PS_ERR_UNKNOWN, true, "Failed to prepare query. Error: %s", mysql_stmt_error(stmt)); 869 mysql_stmt_close(stmt); 870 psFree(query); 871 return -1; 879 psTrace("psLib.db", PS_LOG_INFO, "statment is not in query cache"); 880 // Prepare SQL statement 881 MYSQL_STMT *stmt = mysql_stmt_init(dbh->mysql); 882 if (!stmt) { 883 psAbort("mysql_stmt_init(), out of memory."); 884 } 885 if (mysql_stmt_prepare(stmt, query, (unsigned long)strlen(query))) { 886 psError(PS_ERR_UNKNOWN, true, "Failed to prepare query. Error: %s", mysql_stmt_error(stmt)); 887 mysql_stmt_close(stmt); 888 psFree(query); 889 890 // end lock on query cache 891 if (psMemGetThreadSafety()) { 892 pthread_mutex_unlock(&preparedQueryMutex); 893 } 894 895 return -1; 896 } 897 898 // add this statement to the cache 899 psHashAdd(preparedQuery, query, stmt); 900 } else { 901 psTrace("psLib.db", PS_LOG_INFO, "found statment in query cache"); 902 } 903 904 // end lock on query cache 905 if (psMemGetThreadSafety()) { 906 pthread_mutex_unlock(&preparedQueryMutex); 872 907 } 873 908
Note:
See TracChangeset
for help on using the changeset viewer.
