aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/shared/DataStores/DB2StorageLoader.cpp27
1 files changed, 13 insertions, 14 deletions
diff --git a/src/server/shared/DataStores/DB2StorageLoader.cpp b/src/server/shared/DataStores/DB2StorageLoader.cpp
index d2be433806f..a1acd3b5eac 100644
--- a/src/server/shared/DataStores/DB2StorageLoader.cpp
+++ b/src/server/shared/DataStores/DB2StorageLoader.cpp
@@ -353,8 +353,7 @@ char* DB2FileLoader::AutoProduceStringsArrayHolders(const char* format, char* da
std::size_t localizedStringFields = GetFormatLocalizedStringFieldCount(format);
// each string field at load have array of string for each locale
- std::size_t stringHolderSize = sizeof(char*) * TOTAL_LOCALES;
- std::size_t stringHoldersRecordPoolSize = localizedStringFields * stringHolderSize + (stringFields - localizedStringFields) * sizeof(char*);
+ std::size_t stringHoldersRecordPoolSize = localizedStringFields * sizeof(LocalizedString) + (stringFields - localizedStringFields) * sizeof(char*);
std::size_t stringHoldersPoolSize = stringHoldersRecordPoolSize * recordCount;
char* stringHoldersPool = new char[stringHoldersPoolSize];
@@ -392,9 +391,9 @@ char* DB2FileLoader::AutoProduceStringsArrayHolders(const char* format, char* da
char const*** slot = (char const***)(&dataTable[offset]);
*slot = (char const**)(&stringHoldersPool[stringHoldersRecordPoolSize * y + stringFieldOffset]);
if (format[x] == FT_STRING)
- stringFieldOffset += stringHolderSize;
+ stringFieldOffset += sizeof(LocalizedString);
else
- ++stringFieldOffset;
+ stringFieldOffset += sizeof(char*);
offset += sizeof(char*);
break;
@@ -497,19 +496,19 @@ char* DB2DatabaseLoader::Load(const char* format, HotfixDatabaseStatements prepa
uint32 recordSize = DB2FileLoader::GetFormatRecordSize(format, &indexField);
// we store flat holders pool as single memory block
- size_t stringFields = DB2FileLoader::GetFormatStringFieldCount(format);
+ std::size_t stringFields = DB2FileLoader::GetFormatStringFieldCount(format);
+ std::size_t localizedStringFields = DB2FileLoader::GetFormatLocalizedStringFieldCount(format);
// each string field at load have array of string for each locale
- size_t stringHolderSize = sizeof(char*) * TOTAL_LOCALES;
- size_t stringHoldersRecordPoolSize = stringFields * stringHolderSize;
+ std::size_t stringHoldersRecordPoolSize = localizedStringFields * sizeof(LocalizedString) + (stringFields - localizedStringFields) * sizeof(char*);
if (stringFields)
{
- size_t stringHoldersPoolSize = stringHoldersRecordPoolSize * result->GetRowCount();
+ std::size_t stringHoldersPoolSize = stringHoldersRecordPoolSize * result->GetRowCount();
stringHolders = new char[stringHoldersPoolSize];
// DB2 strings expected to have at least empty string
- for (size_t i = 0; i < stringHoldersPoolSize / sizeof(char*); ++i)
+ for (std::size_t i = 0; i < stringHoldersPoolSize / sizeof(char*); ++i)
((char const**)stringHolders)[i] = nullStr;
}
else
@@ -545,7 +544,7 @@ char* DB2DatabaseLoader::Load(const char* format, HotfixDatabaseStatements prepa
{
Field* fields = result->Fetch();
uint32 offset = 0;
- uint32 stringFieldNumInRecord = 0;
+ uint32 stringFieldOffset = 0;
uint32 indexValue;
if (indexField >= 0)
@@ -585,28 +584,28 @@ char* DB2DatabaseLoader::Load(const char* format, HotfixDatabaseStatements prepa
case FT_STRING:
{
LocalizedString** slot = (LocalizedString**)(&dataValue[offset]);
- *slot = (LocalizedString*)(&stringHolders[stringHoldersRecordPoolSize * rec + stringHolderSize * stringFieldNumInRecord]);
+ *slot = (LocalizedString*)(&stringHolders[stringHoldersRecordPoolSize * rec + stringFieldOffset]);
ASSERT(*slot);
// Value in database in main table field must be for enUS locale
if (char* str = AddString(&(*slot)->Str[LOCALE_enUS], fields[f].GetString()))
stringPool.push_back(str);
- ++stringFieldNumInRecord;
+ stringFieldOffset += sizeof(LocalizedString);
offset += sizeof(char*);
break;
}
case FT_STRING_NOT_LOCALIZED:
{
char const** slot = (char const**)(&dataValue[offset]);
- *slot = (char*)(&stringHolders[stringHoldersRecordPoolSize * rec + stringHolderSize * stringFieldNumInRecord]);
+ *slot = (char*)(&stringHolders[stringHoldersRecordPoolSize * rec + sizeof(LocalizedString) * stringFieldOffset]);
ASSERT(*slot);
// Value in database in main table field must be for enUS locale
if (char* str = AddString(slot, fields[f].GetString()))
stringPool.push_back(str);
- ++stringFieldNumInRecord;
+ stringFieldOffset += sizeof(char*);
offset += sizeof(char*);
break;
}