diff options
| author | Shauren <shauren.trinity@gmail.com> | 2019-11-28 00:23:09 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2019-11-28 00:23:09 +0100 |
| commit | 235ec18143a23602c8e96573b2f3e2dcec4801c9 (patch) | |
| tree | 2c813c504e2eabb6d1e4f45dc6557ca9f6282849 /src/server/shared | |
| parent | cf0e2336895eb410857755a62550b148f7df58da (diff) | |
Core/DataStores: Work around buggy client db2 metadata
Diffstat (limited to 'src/server/shared')
| -rw-r--r-- | src/server/shared/DataStores/DB2Store.cpp | 79 |
1 files changed, 39 insertions, 40 deletions
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; + } } } } |
