void InstanceSaveManager::_DelHelper(const char *fields, const char *table, const char *queryTail,...) { Tokens fieldTokens(fields, ','); ASSERT(fieldTokens.size() != 0); va_list ap; char szQueryTail [MAX_QUERY_LEN]; va_start(ap, queryTail); vsnprintf(szQueryTail, MAX_QUERY_LEN, queryTail, ap); va_end(ap); QueryResult result = CharacterDatabase.PQuery("SELECT %s FROM %s %s", fields, table, szQueryTail); if (result) { do { Field *fields = result->Fetch(); std::ostringstream ss; for (size_t i = 0; i < fieldTokens.size(); i++) { std::string fieldValue = fields[i].GetString(); CharacterDatabase.escape_string(fieldValue); ss << (i != 0 ? " AND " : "") << fieldTokens[i] << " = '" << fieldValue << "'"; } CharacterDatabase.DirectPExecute("DELETE FROM %s WHERE %s", table, ss.str().c_str()); } while (result->NextRow()); } }
void MapPersistentStateManager::_DelHelper(DatabaseType &db, const char *fields, const char *table, const char *queryTail,...) { Tokens fieldTokens(fields, ','); MANGOS_ASSERT(fieldTokens.size() != 0); va_list ap; char szQueryTail [MAX_QUERY_LEN]; va_start(ap, queryTail); vsnprintf( szQueryTail, MAX_QUERY_LEN, queryTail, ap ); va_end(ap); QueryResult *result = db.PQuery("SELECT %s FROM %s %s", fields, table, szQueryTail); if(result) { do { Field *fields = result->Fetch(); std::ostringstream ss; for(size_t i = 0; i < fieldTokens.size(); i++) { std::string fieldValue = fields[i].GetCppString(); db.escape_string(fieldValue); ss << (i != 0 ? " AND " : "") << fieldTokens[i] << " = '" << fieldValue << "'"; } db.PExecute("DELETE FROM %s WHERE %s", table, ss.str().c_str()); } while (result->NextRow()); delete result; } }