From 235ec18143a23602c8e96573b2f3e2dcec4801c9 Mon Sep 17 00:00:00 2001 From: Shauren Date: Thu, 28 Nov 2019 00:23:09 +0100 Subject: Core/DataStores: Work around buggy client db2 metadata --- src/server/shared/DataStores/DB2Store.cpp | 79 +++++++++++++++---------------- 1 file changed, 39 insertions(+), 40 deletions(-) (limited to 'src/server/shared') diff --git a/src/server/shared/DataStores/DB2Store.cpp b/src/server/shared/DataStores/DB2Store.cpp index e1fb5b9e43d..7ee402d8aed 100644 --- a/src/server/shared/DataStores/DB2Store.cpp +++ b/src/server/shared/DataStores/DB2Store.cpp @@ -36,52 +36,51 @@ DB2StorageBase::~DB2StorageBase() void DB2StorageBase::WriteRecordData(char const* entry, uint32 locale, ByteBuffer& buffer) const { - std::size_t i = 0; if (!_loadInfo->Meta->HasIndexFieldInData()) - { entry += 4; - ++i; - } - for (; i < _loadInfo->FieldCount; ++i) + for (uint32 i = 0; i < _loadInfo->Meta->FieldCount; ++i) { - switch (_loadInfo->TypesString[i]) + for (uint8 arr = 0; arr < _loadInfo->Meta->Fields[i].ArraySize; ++arr) { - case FT_INT: - buffer << *(uint32*)entry; - entry += 4; - break; - case FT_FLOAT: - buffer << *(float*)entry; - entry += 4; - break; - case FT_BYTE: - buffer << *(uint8*)entry; - entry += 1; - break; - case FT_SHORT: - buffer << *(uint16*)entry; - entry += 2; - break; - case FT_LONG: - buffer << *(uint64*)entry; - entry += 8; - break; - case FT_STRING: - { - LocalizedString* locStr = *(LocalizedString**)entry; - if (locStr->Str[locale][0] == '\0') - locale = 0; - - buffer << locStr->Str[locale]; - entry += sizeof(LocalizedString*); - break; - } - case FT_STRING_NOT_LOCALIZED: + switch (_loadInfo->Meta->Fields[i].Type) { - buffer << *(char const**)entry; - entry += sizeof(char const*); - break; + case FT_INT: + buffer << *(uint32*)entry; + entry += 4; + break; + case FT_FLOAT: + buffer << *(float*)entry; + entry += 4; + break; + case FT_BYTE: + buffer << *(uint8*)entry; + entry += 1; + break; + case FT_SHORT: + buffer << *(uint16*)entry; + entry += 2; + break; + case FT_LONG: + buffer << *(uint64*)entry; + entry += 8; + break; + case FT_STRING: + { + LocalizedString* locStr = *(LocalizedString**)entry; + if (locStr->Str[locale][0] == '\0') + locale = 0; + + buffer << locStr->Str[locale]; + entry += sizeof(LocalizedString*); + break; + } + case FT_STRING_NOT_LOCALIZED: + { + buffer << *(char const**)entry; + entry += sizeof(char const*); + break; + } } } } -- cgit v1.2.3