diff options
author | Shauren <shauren.trinity@gmail.com> | 2016-11-02 00:06:09 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2016-11-02 00:06:09 +0100 |
commit | 4acaf2dda4e1543ff6c64409ce19db987e3ba06e (patch) | |
tree | 59ac33cf05aacaf2e50d4734980fa329a7af058a /src | |
parent | 88d94ef29c386324cc351f4859814bf5c23205ff (diff) |
Core/DataStores: Fixed crash with db2 loaders on gcc 4.9
Closes #18166
Diffstat (limited to 'src')
-rw-r--r-- | src/server/shared/DataStores/DB2StorageLoader.cpp | 144 | ||||
-rw-r--r-- | src/server/shared/DataStores/DB2StorageLoader.h | 6 | ||||
-rw-r--r-- | src/server/shared/DataStores/DB2Store.h | 14 |
3 files changed, 82 insertions, 82 deletions
diff --git a/src/server/shared/DataStores/DB2StorageLoader.cpp b/src/server/shared/DataStores/DB2StorageLoader.cpp index 40feb39671a..0b5f268bc5f 100644 --- a/src/server/shared/DataStores/DB2StorageLoader.cpp +++ b/src/server/shared/DataStores/DB2StorageLoader.cpp @@ -46,7 +46,7 @@ class DB2FileLoaderImpl { public: virtual ~DB2FileLoaderImpl() { } - virtual bool Load(char const* filename, FILE* file, DB2LoadInfo const& loadInfo, DB2Header const* header) = 0; + virtual bool Load(char const* filename, FILE* file, DB2LoadInfo const* loadInfo, DB2Header const* header) = 0; virtual char* AutoProduceData(uint32& count, char**& indexTable, std::vector<char*>& stringPool) = 0; virtual char* AutoProduceStrings(char* dataTable, uint32 locale) = 0; virtual void AutoProduceRecordCopies(uint32 records, char** indexTable, char* dataTable) = 0; @@ -58,7 +58,7 @@ public: DB2FileLoaderRegularImpl(); ~DB2FileLoaderRegularImpl(); - bool Load(char const* filename, FILE* file, DB2LoadInfo const& loadInfo, DB2Header const* header) override; + bool Load(char const* filename, FILE* file, DB2LoadInfo const* loadInfo, DB2Header const* header) override; char* AutoProduceData(uint32& count, char**& indexTable, std::vector<char*>& stringPool) override; char* AutoProduceStrings(char* dataTable, uint32 locale) override; void AutoProduceRecordCopies(uint32 records, char** indexTable, char* dataTable) override; @@ -97,7 +97,7 @@ private: #pragma pack(pop) char const* fileName; - DB2LoadInfo _loadInfo; + DB2LoadInfo const* _loadInfo; DB2Header const* _header; unsigned char* data; @@ -114,7 +114,7 @@ public: DB2FileLoaderSparseImpl(); ~DB2FileLoaderSparseImpl(); - bool Load(char const* filename, FILE* file, DB2LoadInfo const& loadInfo, DB2Header const* header) override; + bool Load(char const* filename, FILE* file, DB2LoadInfo const* loadInfo, DB2Header const* header) override; char* AutoProduceData(uint32& records, char**& indexTable, std::vector<char*>& stringPool) override; char* AutoProduceStrings(char* dataTable, uint32 locale) override; void AutoProduceRecordCopies(uint32 /*records*/, char** /*indexTable*/, char* /*dataTable*/) override { } @@ -134,7 +134,7 @@ private: #pragma pack(pop) char const* fileName; - DB2LoadInfo _loadInfo; + DB2LoadInfo const* _loadInfo; DB2Header const* _header; FieldEntry* fields; @@ -212,7 +212,7 @@ DB2FileLoaderRegularImpl::Record::Record(DB2FileLoaderRegularImpl &file_, unsign DB2FileLoaderRegularImpl::DB2FileLoaderRegularImpl() { fileName = nullptr; - memset(&_loadInfo, 0, sizeof(_loadInfo)); + _loadInfo = nullptr; _header = nullptr; data = nullptr; stringTable = nullptr; @@ -222,18 +222,18 @@ DB2FileLoaderRegularImpl::DB2FileLoaderRegularImpl() fields = nullptr; } -bool DB2FileLoaderRegularImpl::Load(char const* filename, FILE* file, DB2LoadInfo const& loadInfo, DB2Header const* header) +bool DB2FileLoaderRegularImpl::Load(char const* filename, FILE* file, DB2LoadInfo const* loadInfo, DB2Header const* header) { _loadInfo = loadInfo; _header = header; - ASSERT(loadInfo.Meta->IndexField == -1 || loadInfo.Meta->IndexField == int32(header->IndexField)); + ASSERT(_loadInfo->Meta->IndexField == -1 || _loadInfo->Meta->IndexField == int32(header->IndexField)); fileName = filename; fields = new FieldEntry[header->FieldCount]; if (fread(fields, header->FieldCount * sizeof(FieldEntry), 1, file) != 1) return false; - if (!loadInfo.Meta->HasIndexFieldInData()) + if (!_loadInfo->Meta->HasIndexFieldInData()) idTableSize = header->RecordCount * sizeof(uint32); data = new unsigned char[header->RecordSize * header->RecordCount + header->StringTableSize]; @@ -277,12 +277,12 @@ static char const* const nullStr = ""; char* DB2FileLoaderRegularImpl::AutoProduceData(uint32& records, char**& indexTable, std::vector<char*>& stringPool) { - if (_loadInfo.Meta->FieldCount != _header->FieldCount) - return NULL; + if (_loadInfo->Meta->FieldCount != _header->FieldCount) + return nullptr; //get struct size and index pos - uint32 indexField = _loadInfo.Meta->GetIndexField(); - uint32 recordsize = _loadInfo.Meta->GetRecordSize(); + uint32 indexField = _loadInfo->Meta->GetIndexField(); + uint32 recordsize = _loadInfo->Meta->GetRecordSize(); uint32 maxi = 0; //find max index @@ -322,8 +322,8 @@ char* DB2FileLoaderRegularImpl::AutoProduceData(uint32& records, char**& indexTa char* dataTable = new char[(_header->RecordCount + (_header->CopyTableSize / 8)) * recordsize]; // we store flat holders pool as single memory block - std::size_t stringFields = _loadInfo.GetStringFieldCount(false); - std::size_t localizedStringFields = _loadInfo.GetStringFieldCount(true); + std::size_t stringFields = _loadInfo->GetStringFieldCount(false); + std::size_t localizedStringFields = _loadInfo->GetStringFieldCount(true); // each string field at load have array of string for each locale std::size_t stringHoldersRecordPoolSize = localizedStringFields * sizeof(LocalizedString) + (stringFields - localizedStringFields) * sizeof(char*); @@ -345,12 +345,12 @@ char* DB2FileLoaderRegularImpl::AutoProduceData(uint32& records, char**& indexTa for (uint32 y = 0; y < _header->RecordCount; y++) { Record rec = getRecord(y); - uint32 indexVal = _loadInfo.Meta->HasIndexFieldInData() ? rec.getUInt(indexField, 0, false) : ((uint32*)idTable)[y]; + uint32 indexVal = _loadInfo->Meta->HasIndexFieldInData() ? rec.getUInt(indexField, 0, false) : ((uint32*)idTable)[y]; indexTable[indexVal] = &dataTable[offset]; uint32 fieldIndex = 0; - if (!_loadInfo.Meta->HasIndexFieldInData()) + if (!_loadInfo->Meta->HasIndexFieldInData()) { *((uint32*)(&dataTable[offset])) = indexVal; offset += 4; @@ -361,16 +361,16 @@ char* DB2FileLoaderRegularImpl::AutoProduceData(uint32& records, char**& indexTa for (uint32 x = 0; x < _header->FieldCount; ++x) { - for (uint32 z = 0; z < _loadInfo.Meta->ArraySizes[x]; ++z) + for (uint32 z = 0; z < _loadInfo->Meta->ArraySizes[x]; ++z) { - switch (_loadInfo.TypesString[fieldIndex]) + switch (_loadInfo->TypesString[fieldIndex]) { case FT_FLOAT: *((float*)(&dataTable[offset])) = rec.getFloat(x, z); offset += 4; break; case FT_INT: - *((uint32*)(&dataTable[offset])) = rec.getUInt(x, z, _loadInfo.Fields[fieldIndex].IsSigned); + *((uint32*)(&dataTable[offset])) = rec.getUInt(x, z, _loadInfo->Fields[fieldIndex].IsSigned); offset += 4; break; case FT_BYTE: @@ -387,7 +387,7 @@ char* DB2FileLoaderRegularImpl::AutoProduceData(uint32& records, char**& indexTa // init db2 string field slots by pointers to string holders char const*** slot = (char const***)(&dataTable[offset]); *slot = (char const**)(&stringHoldersPool[stringHoldersRecordPoolSize * y + stringFieldOffset]); - if (_loadInfo.Meta->Types[x] == FT_STRING) + if (_loadInfo->Meta->Types[x] == FT_STRING) stringFieldOffset += sizeof(LocalizedString); else stringFieldOffset += sizeof(char*); @@ -396,7 +396,7 @@ char* DB2FileLoaderRegularImpl::AutoProduceData(uint32& records, char**& indexTa break; } default: - ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo.Meta->Types[x], fileName); + ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->Meta->Types[x], fileName); break; } ++fieldIndex; @@ -409,7 +409,7 @@ char* DB2FileLoaderRegularImpl::AutoProduceData(uint32& records, char**& indexTa char* DB2FileLoaderRegularImpl::AutoProduceStrings(char* dataTable, uint32 locale) { - if (_loadInfo.Meta->FieldCount != _header->FieldCount) + if (_loadInfo->Meta->FieldCount != _header->FieldCount) return nullptr; if (!(_header->Locale & (1 << locale))) @@ -437,7 +437,7 @@ char* DB2FileLoaderRegularImpl::AutoProduceStrings(char* dataTable, uint32 local for (uint32 y = 0; y < _header->RecordCount; y++) { uint32 fieldIndex = 0; - if (!_loadInfo.Meta->HasIndexFieldInData()) + if (!_loadInfo->Meta->HasIndexFieldInData()) { offset += 4; ++fieldIndex; @@ -445,9 +445,9 @@ char* DB2FileLoaderRegularImpl::AutoProduceStrings(char* dataTable, uint32 local for (uint32 x = 0; x < _header->FieldCount; ++x) { - for (uint32 z = 0; z < _loadInfo.Meta->ArraySizes[x]; ++z) + for (uint32 z = 0; z < _loadInfo->Meta->ArraySizes[x]; ++z) { - switch (_loadInfo.TypesString[fieldIndex]) + switch (_loadInfo->TypesString[fieldIndex]) { case FT_FLOAT: case FT_INT: @@ -481,7 +481,7 @@ char* DB2FileLoaderRegularImpl::AutoProduceStrings(char* dataTable, uint32 local break; } default: - ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo.Meta->Types[x], fileName); + ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->Meta->Types[x], fileName); break; } ++fieldIndex; @@ -494,7 +494,7 @@ char* DB2FileLoaderRegularImpl::AutoProduceStrings(char* dataTable, uint32 local void DB2FileLoaderRegularImpl::AutoProduceRecordCopies(uint32 records, char** indexTable, char* dataTable) { - uint32 recordsize = _loadInfo.Meta->GetRecordSize(); + uint32 recordsize = _loadInfo->Meta->GetRecordSize(); uint32 offset = _header->RecordCount * recordsize; uint32* copyIds = (uint32*)copyTable; for (uint32 c = 0; c < _header->CopyTableSize / 4; c += 2) @@ -507,8 +507,8 @@ void DB2FileLoaderRegularImpl::AutoProduceRecordCopies(uint32 records, char** in indexTable[to] = &dataTable[offset]; memcpy(indexTable[to], indexTable[from], recordsize); - if (_loadInfo.Meta->HasIndexFieldInData()) - *((uint32*)(&dataTable[offset + fields[_loadInfo.Meta->GetIndexField()].Offset])) = to; + if (_loadInfo->Meta->HasIndexFieldInData()) + *((uint32*)(&dataTable[offset + fields[_loadInfo->Meta->GetIndexField()].Offset])) = to; else *((uint32*)(&dataTable[offset])) = to; @@ -520,7 +520,7 @@ void DB2FileLoaderRegularImpl::AutoProduceRecordCopies(uint32 records, char** in DB2FileLoaderSparseImpl::DB2FileLoaderSparseImpl() { fileName = nullptr; - memset(&_loadInfo, 0, sizeof(_loadInfo)); + _loadInfo = nullptr; _header = nullptr; fields = nullptr; dataStart = 0; @@ -528,7 +528,7 @@ DB2FileLoaderSparseImpl::DB2FileLoaderSparseImpl() offsets = nullptr; } -bool DB2FileLoaderSparseImpl::Load(char const* filename, FILE* file, DB2LoadInfo const& loadInfo, DB2Header const* header) +bool DB2FileLoaderSparseImpl::Load(char const* filename, FILE* file, DB2LoadInfo const* loadInfo, DB2Header const* header) { _loadInfo = loadInfo; _header = header; @@ -561,11 +561,11 @@ DB2FileLoaderSparseImpl::~DB2FileLoaderSparseImpl() char* DB2FileLoaderSparseImpl::AutoProduceData(uint32& maxId, char**& indexTable, std::vector<char*>& stringPool) { - if (_loadInfo.Meta->FieldCount != _header->FieldCount) + if (_loadInfo->Meta->FieldCount != _header->FieldCount) return NULL; //get struct size and index pos - uint32 recordsize = _loadInfo.Meta->GetRecordSize(); + uint32 recordsize = _loadInfo->Meta->GetRecordSize(); uint32 offsetCount = _header->MaxId - _header->MinId + 1; uint32 records = 0; @@ -588,8 +588,8 @@ char* DB2FileLoaderSparseImpl::AutoProduceData(uint32& maxId, char**& indexTable char* dataTable = new char[records * recordsize]; // we store flat holders pool as single memory block - std::size_t stringFields = _loadInfo.GetStringFieldCount(false); - std::size_t localizedStringFields = _loadInfo.GetStringFieldCount(true); + std::size_t stringFields = _loadInfo->GetStringFieldCount(false); + std::size_t localizedStringFields = _loadInfo->GetStringFieldCount(true); // each string field at load have array of string for each locale std::size_t stringHoldersRecordPoolSize = localizedStringFields * sizeof(LocalizedString) + (stringFields - localizedStringFields) * sizeof(char*); @@ -602,8 +602,8 @@ char* DB2FileLoaderSparseImpl::AutoProduceData(uint32& maxId, char**& indexTable for (std::size_t i = 0; i < stringHoldersPoolSize / sizeof(char*); ++i) ((char const**)stringHoldersPool)[i] = nullStr; - char* stringTable = new char[expandedDataSize - records * ((recordsize - (!_loadInfo.Meta->HasIndexFieldInData() ? 4 : 0)) - stringFields * sizeof(char*))]; - memset(stringTable, 0, expandedDataSize - records * ((recordsize - (!_loadInfo.Meta->HasIndexFieldInData() ? 4 : 0)) - stringFields * sizeof(char*))); + char* stringTable = new char[expandedDataSize - records * ((recordsize - (!_loadInfo->Meta->HasIndexFieldInData() ? 4 : 0)) - stringFields * sizeof(char*))]; + memset(stringTable, 0, expandedDataSize - records * ((recordsize - (!_loadInfo->Meta->HasIndexFieldInData() ? 4 : 0)) - stringFields * sizeof(char*))); stringPool.push_back(stringTable); char* stringPtr = stringTable; @@ -619,7 +619,7 @@ char* DB2FileLoaderSparseImpl::AutoProduceData(uint32& maxId, char**& indexTable std::size_t fieldOffset = 0; uint32 stringFieldOffset = 0; - if (!_loadInfo.Meta->HasIndexFieldInData()) + if (!_loadInfo->Meta->HasIndexFieldInData()) { *((uint32*)(&dataTable[offset])) = y + _header->MinId; offset += 4; @@ -628,9 +628,9 @@ char* DB2FileLoaderSparseImpl::AutoProduceData(uint32& maxId, char**& indexTable for (uint32 x = 0; x < _header->FieldCount; ++x) { uint16 fieldBytes = 4 - fields[x].UnusedBits / 8; - for (uint32 z = 0; z < _loadInfo.Meta->ArraySizes[x]; ++z) + for (uint32 z = 0; z < _loadInfo->Meta->ArraySizes[x]; ++z) { - switch (_loadInfo.Meta->Types[x]) + switch (_loadInfo->Meta->Types[x]) { case FT_FLOAT: { @@ -724,7 +724,7 @@ char* DB2FileLoaderSparseImpl::AutoProduceData(uint32& maxId, char**& indexTable break; } default: - ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo.Meta->Types[x], fileName); + ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->Meta->Types[x], fileName); break; } } @@ -738,7 +738,7 @@ char* DB2FileLoaderSparseImpl::AutoProduceData(uint32& maxId, char**& indexTable char* DB2FileLoaderSparseImpl::AutoProduceStrings(char* dataTable, uint32 locale) { - if (_loadInfo.Meta->FieldCount != _header->FieldCount) + if (_loadInfo->Meta->FieldCount != _header->FieldCount) return nullptr; if (!(_header->Locale & (1 << locale))) @@ -764,10 +764,10 @@ char* DB2FileLoaderSparseImpl::AutoProduceStrings(char* dataTable, uint32 locale if (offsets[i].FileOffset && offsets[i].RecordSize) ++records; - uint32 recordsize = _loadInfo.Meta->GetRecordSize(); - std::size_t stringFields = _loadInfo.GetStringFieldCount(true); - char* stringTable = new char[_header->StringTableSize - dataStart - records * ((recordsize - (!_loadInfo.Meta->HasIndexFieldInData() ? 4 : 0)) - stringFields * sizeof(char*))]; - memset(stringTable, 0, _header->StringTableSize - dataStart - records * ((recordsize - (!_loadInfo.Meta->HasIndexFieldInData() ? 4 : 0)) - stringFields * sizeof(char*))); + uint32 recordsize = _loadInfo->Meta->GetRecordSize(); + std::size_t stringFields = _loadInfo->GetStringFieldCount(true); + char* stringTable = new char[_header->StringTableSize - dataStart - records * ((recordsize - (!_loadInfo->Meta->HasIndexFieldInData() ? 4 : 0)) - stringFields * sizeof(char*))]; + memset(stringTable, 0, _header->StringTableSize - dataStart - records * ((recordsize - (!_loadInfo->Meta->HasIndexFieldInData() ? 4 : 0)) - stringFields * sizeof(char*))); char* stringPtr = stringTable; uint32 offset = 0; @@ -777,15 +777,15 @@ char* DB2FileLoaderSparseImpl::AutoProduceStrings(char* dataTable, uint32 locale if (!offsets[y].FileOffset || !offsets[y].RecordSize) continue; - if (!_loadInfo.Meta->HasIndexFieldInData()) + if (!_loadInfo->Meta->HasIndexFieldInData()) offset += 4; std::size_t fieldOffset = 0; for (uint32 x = 0; x < _header->FieldCount; ++x) { - for (uint32 z = 0; z < _loadInfo.Meta->ArraySizes[x]; ++z) + for (uint32 z = 0; z < _loadInfo->Meta->ArraySizes[x]; ++z) { - switch (_loadInfo.Meta->Types[x]) + switch (_loadInfo->Meta->Types[x]) { case FT_FLOAT: offset += 4; @@ -820,7 +820,7 @@ char* DB2FileLoaderSparseImpl::AutoProduceStrings(char* dataTable, uint32 locale break; } default: - ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo.Meta->Types[x], fileName); + ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->Meta->Types[x], fileName); break; } } @@ -833,20 +833,20 @@ char* DB2FileLoaderSparseImpl::AutoProduceStrings(char* dataTable, uint32 locale char* DB2DatabaseLoader::Load(uint32& records, char**& indexTable, char*& stringHolders, std::vector<char*>& stringPool) { // Even though this query is executed only once, prepared statement is used to send data from mysql server in binary format - PreparedQueryResult result = HotfixDatabase.Query(HotfixDatabase.GetPreparedStatement(_loadInfo.Statement)); + PreparedQueryResult result = HotfixDatabase.Query(HotfixDatabase.GetPreparedStatement(_loadInfo->Statement)); if (!result) return nullptr; - if (_loadInfo.Meta->GetDbFieldCount() != result->GetFieldCount()) + if (_loadInfo->Meta->GetDbFieldCount() != result->GetFieldCount()) return nullptr; // get struct size and index pos - uint32 indexField = _loadInfo.Meta->GetDbIndexField(); - uint32 recordSize = _loadInfo.Meta->GetRecordSize(); + uint32 indexField = _loadInfo->Meta->GetDbIndexField(); + uint32 recordSize = _loadInfo->Meta->GetRecordSize(); // we store flat holders pool as single memory block - std::size_t stringFields = _loadInfo.GetStringFieldCount(false); - std::size_t localizedStringFields = _loadInfo.GetStringFieldCount(true); + std::size_t stringFields = _loadInfo->GetStringFieldCount(false); + std::size_t localizedStringFields = _loadInfo->GetStringFieldCount(true); // each string field at load have array of string for each locale std::size_t stringHoldersRecordPoolSize = localizedStringFields * sizeof(LocalizedString) + (stringFields - localizedStringFields) * sizeof(char*); @@ -900,18 +900,18 @@ char* DB2DatabaseLoader::Load(uint32& records, char**& indexTable, char*& string } uint32 f = 0; - if (!_loadInfo.Meta->HasIndexFieldInData()) + if (!_loadInfo->Meta->HasIndexFieldInData()) { *((uint32*)(&dataValue[offset])) = indexValue; offset += 4; ++f; } - for (uint32 x = 0; x < _loadInfo.Meta->FieldCount; ++x) + for (uint32 x = 0; x < _loadInfo->Meta->FieldCount; ++x) { - for (uint32 z = 0; z < _loadInfo.Meta->ArraySizes[x]; ++z) + for (uint32 z = 0; z < _loadInfo->Meta->ArraySizes[x]; ++z) { - switch (_loadInfo.TypesString[f]) + switch (_loadInfo->TypesString[f]) { case FT_FLOAT: *((float*)(&dataValue[offset])) = fields[f].GetFloat(); @@ -958,7 +958,7 @@ char* DB2DatabaseLoader::Load(uint32& records, char**& indexTable, char*& string break; } default: - ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo.Meta->Types[x], _storageName.c_str()); + ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->Meta->Types[x], _storageName.c_str()); break; } ++f; @@ -994,18 +994,18 @@ char* DB2DatabaseLoader::Load(uint32& records, char**& indexTable, char*& string void DB2DatabaseLoader::LoadStrings(uint32 locale, uint32 records, char** indexTable, std::vector<char*>& stringPool) { - PreparedStatement* stmt = HotfixDatabase.GetPreparedStatement(HotfixDatabaseStatements(_loadInfo.Statement + 1)); + PreparedStatement* stmt = HotfixDatabase.GetPreparedStatement(HotfixDatabaseStatements(_loadInfo->Statement + 1)); stmt->setString(0, localeNames[locale]); PreparedQueryResult result = HotfixDatabase.Query(stmt); if (!result) return; - std::size_t stringFields = _loadInfo.GetStringFieldCount(true); + std::size_t stringFields = _loadInfo->GetStringFieldCount(true); if (result->GetFieldCount() != stringFields + 1 /*ID*/) return; - uint32 fieldCount = _loadInfo.Meta->FieldCount; - uint32 recordSize = _loadInfo.Meta->GetRecordSize(); + uint32 fieldCount = _loadInfo->Meta->FieldCount; + uint32 recordSize = _loadInfo->Meta->GetRecordSize(); do { @@ -1021,7 +1021,7 @@ void DB2DatabaseLoader::LoadStrings(uint32 locale, uint32 records, char** indexT if (char* dataValue = indexTable[indexValue]) { uint32 fieldIndex = 0; - if (!_loadInfo.Meta->HasIndexFieldInData()) + if (!_loadInfo->Meta->HasIndexFieldInData()) { offset += 4; ++fieldIndex; @@ -1029,9 +1029,9 @@ void DB2DatabaseLoader::LoadStrings(uint32 locale, uint32 records, char** indexT for (uint32 x = 0; x < fieldCount; ++x) { - for (uint32 z = 0; z < _loadInfo.Meta->ArraySizes[x]; ++z) + for (uint32 z = 0; z < _loadInfo->Meta->ArraySizes[x]; ++z) { - switch (_loadInfo.TypesString[fieldIndex]) + switch (_loadInfo->TypesString[fieldIndex]) { case FT_FLOAT: case FT_INT: @@ -1059,7 +1059,7 @@ void DB2DatabaseLoader::LoadStrings(uint32 locale, uint32 records, char** indexT offset += sizeof(char*); break; default: - ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo.Meta->Types[x], _storageName.c_str()); + ASSERT(false, "Unknown format character '%c' found in %s meta", _loadInfo->Meta->Types[x], _storageName.c_str()); break; } ++fieldIndex; @@ -1109,7 +1109,7 @@ DB2FileLoader::~DB2FileLoader() delete _impl; } -bool DB2FileLoader::Load(char const* filename, DB2LoadInfo const& loadInfo) +bool DB2FileLoader::Load(char const* filename, DB2LoadInfo const* loadInfo) { FILE* f = fopen(filename, "rb"); if (!f) @@ -1177,7 +1177,7 @@ bool DB2FileLoader::Load(char const* filename, DB2LoadInfo const& loadInfo) EndianConvert(_header.LayoutHash); - if (_header.LayoutHash != loadInfo.Meta->LayoutHash) + if (_header.LayoutHash != loadInfo->Meta->LayoutHash) { fclose(f); return false; diff --git a/src/server/shared/DataStores/DB2StorageLoader.h b/src/server/shared/DataStores/DB2StorageLoader.h index 83c42a75972..d86785ce7f2 100644 --- a/src/server/shared/DataStores/DB2StorageLoader.h +++ b/src/server/shared/DataStores/DB2StorageLoader.h @@ -64,7 +64,7 @@ public: DB2FileLoader(); ~DB2FileLoader(); - bool Load(char const* filename, DB2LoadInfo const& loadInfo); + bool Load(char const* filename, DB2LoadInfo const* loadInfo); char* AutoProduceData(uint32& count, char**& indexTable, std::vector<char*>& stringPool); char* AutoProduceStrings(char* dataTable, uint32 locale); void AutoProduceRecordCopies(uint32 records, char** indexTable, char* dataTable); @@ -81,7 +81,7 @@ private: class TC_SHARED_API DB2DatabaseLoader { public: - DB2DatabaseLoader(std::string const& storageName, DB2LoadInfo const& loadInfo) : _storageName(storageName), _loadInfo(loadInfo) { } + DB2DatabaseLoader(std::string const& storageName, DB2LoadInfo const* loadInfo) : _storageName(storageName), _loadInfo(loadInfo) { } char* Load(uint32& records, char**& indexTable, char*& stringHolders, std::vector<char*>& stringPool); void LoadStrings(uint32 locale, uint32 records, char** indexTable, std::vector<char*>& stringPool); @@ -89,7 +89,7 @@ public: private: std::string _storageName; - DB2LoadInfo _loadInfo; + DB2LoadInfo const* _loadInfo; }; #endif diff --git a/src/server/shared/DataStores/DB2Store.h b/src/server/shared/DataStores/DB2Store.h index a5fca320541..7f17d21bb3a 100644 --- a/src/server/shared/DataStores/DB2Store.h +++ b/src/server/shared/DataStores/DB2Store.h @@ -28,8 +28,8 @@ class DB2StorageBase { public: - DB2StorageBase(char const* fileName, DB2LoadInfo loadInfo) - : _tableHash(0), _layoutHash(0), _fileName(fileName), _fieldCount(0), _loadInfo(loadInfo), _dataTable(nullptr), _dataTableEx(nullptr) { } + DB2StorageBase(char const* fileName, DB2LoadInfo&& loadInfo) + : _tableHash(0), _layoutHash(0), _fileName(fileName), _fieldCount(0), _loadInfo(std::move(loadInfo)), _dataTable(nullptr), _dataTableEx(nullptr) { } virtual ~DB2StorageBase() { @@ -127,7 +127,7 @@ class DB2Storage : public DB2StorageBase public: typedef DBStorageIterator<T> iterator; - DB2Storage(char const* fileName, DB2LoadInfo loadInfo) : DB2StorageBase(fileName, loadInfo), + DB2Storage(char const* fileName, DB2LoadInfo&& loadInfo) : DB2StorageBase(fileName, std::move(loadInfo)), _indexTableSize(0) { _indexTable.AsT = NULL; @@ -154,7 +154,7 @@ public: { DB2FileLoader db2; // Check if load was successful, only then continue - if (!db2.Load((path + _fileName).c_str(), _loadInfo)) + if (!db2.Load((path + _fileName).c_str(), &_loadInfo)) return false; _fieldCount = db2.GetCols(); @@ -183,7 +183,7 @@ public: DB2FileLoader db2; // Check if load was successful, only then continue - if (!db2.Load((path + _fileName).c_str(), _loadInfo)) + if (!db2.Load((path + _fileName).c_str(), &_loadInfo)) return false; // load strings from another locale db2 data @@ -196,7 +196,7 @@ public: void LoadFromDB() override { char* extraStringHolders = nullptr; - _dataTableEx = DB2DatabaseLoader(_fileName, _loadInfo).Load(_indexTableSize, _indexTable.AsChar, extraStringHolders, _stringPool); + _dataTableEx = DB2DatabaseLoader(_fileName, &_loadInfo).Load(_indexTableSize, _indexTable.AsChar, extraStringHolders, _stringPool); if (extraStringHolders) _stringPool.push_back(extraStringHolders); } @@ -206,7 +206,7 @@ public: if (!_loadInfo.GetStringFieldCount(true)) return; - DB2DatabaseLoader(_fileName, _loadInfo).LoadStrings(locale, _indexTableSize, _indexTable.AsChar, _stringPool); + DB2DatabaseLoader(_fileName, &_loadInfo).LoadStrings(locale, _indexTableSize, _indexTable.AsChar, _stringPool); } iterator begin() { return iterator(_indexTable.AsT, _indexTableSize); } |