Hooks
static bool BeforeCvDatabaseUtility_PopulateArrayByValue(CvDatabaseUtility* self, int*& pArray, const char* szTypeTableName, const char* szDataTableName, const char* szTypeColumn, const char* szFilterColumn, const char* szFilterValue, const char* szValueColumn, int iDefaultValue, int iMinArraySize, bool& result);static void AfterCvDatabaseUtility_PopulateArrayByValue(CvDatabaseUtility* self, int*& pArray, const char* szTypeTableName, const char* szDataTableName, const char* szTypeColumn, const char* szFilterColumn, const char* szFilterValue, const char* szValueColumn, int iDefaultValue, int iMinArraySize, bool& result);static bool ReplaceCvDatabaseUtility_PopulateArrayByValue(bool (*original)(CvDatabaseUtility*, int*&, const char*, const char*, const char*, const char*, const char*, const char*, int, int), CvDatabaseUtility* self, int*& pArray, const char* szTypeTableName, const char* szDataTableName, const char* szTypeColumn, const char* szFilterColumn, const char* szFilterValue, const char* szValueColumn, int iDefaultValue, int iMinArraySize);CivRegisterBefore<CivHooks::CvDatabaseUtility_PopulateArrayByValue>(host, &BeforeCvDatabaseUtility_PopulateArrayByValue);CivRegisterAfter<CivHooks::CvDatabaseUtility_PopulateArrayByValue>(host, &AfterCvDatabaseUtility_PopulateArrayByValue);CivRegisterReplace<CivHooks::CvDatabaseUtility_PopulateArrayByValue>(host, &ReplaceCvDatabaseUtility_PopulateArrayByValue);
Code
218bool CvDatabaseUtility::PopulateArrayByValue(int*& pArray, const char* szTypeTableName, const char* szDataTableName, const char* szTypeColumn, const char* szFilterColumn, const char* szFilterValue, const char* szValueColumn, int iDefaultValue /* = 0 */, int iMinArraySize /* = 0 */)219{220 int iSize = MaxRows(szTypeTableName);221 InitializeArray(pArray, (iSize<iMinArraySize)?iMinArraySize:iSize, iDefaultValue);222223 std::string strKey = "_PABV_";224 strKey.append(szTypeTableName);225 strKey.append(szDataTableName);226 strKey.append(szFilterColumn);227 strKey.append(szValueColumn);228229 Database::Results* pResults = GetResults(strKey);230 if(pResults == NULL)231 {232 char szSQL[512];233 sprintf_s(szSQL, "select %s.ID, %s from %s inner join %s on %s = %s.Type where %s = ?", szTypeTableName, szValueColumn, szDataTableName, szTypeTableName, szTypeColumn, szTypeTableName, szFilterColumn);234 pResults = PrepareResults(strKey, szSQL);235 if(pResults == NULL)236 return false;237 }238239 if(!pResults->Bind(1, szFilterValue, false))240 {241 CvAssertMsg(false, GetErrorMessage());242 return false;243 }244 while(pResults->Step())245 {246 const int idx = pResults->GetInt(0);247 const int value = pResults->GetInt(1);248 pArray[idx] = value;249 }250251 pResults->Reset();252253 return true;254}