aboutsummaryrefslogtreecommitdiff
path: root/src/server/shared
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2019-11-28 00:23:09 +0100
committerShauren <shauren.trinity@gmail.com>2019-11-28 00:23:09 +0100
commit235ec18143a23602c8e96573b2f3e2dcec4801c9 (patch)
tree2c813c504e2eabb6d1e4f45dc6557ca9f6282849 /src/server/shared
parentcf0e2336895eb410857755a62550b148f7df58da (diff)
Core/DataStores: Work around buggy client db2 metadata
Diffstat (limited to 'src/server/shared')
-rw-r--r--src/server/shared/DataStores/DB2Store.cpp79
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;
+ }
}
}
}