Core/DataStores: Work around buggy client db2 metadata

This commit is contained in:
Shauren
2019-11-28 00:23:09 +01:00
parent cf0e233689
commit 235ec18143
10 changed files with 1018 additions and 908 deletions

View File

@@ -22,8 +22,8 @@ DB2MetaField::DB2MetaField(DBCFormer type, uint8 arraySize, bool isSigned) : Typ
{
}
DB2Meta::DB2Meta(uint32 fileDataId, int32 indexField, uint32 fieldCount, uint32 layoutHash, DB2MetaField const* fields, int32 parentIndexField)
: FileDataId(fileDataId),IndexField(indexField), ParentIndexField(parentIndexField), FieldCount(fieldCount), LayoutHash(layoutHash), Fields(fields)
DB2Meta::DB2Meta(uint32 fileDataId, int32 indexField, uint32 fieldCount, uint32 fileFieldCount, uint32 layoutHash, DB2MetaField const* fields, int32 parentIndexField)
: FileDataId(fileDataId),IndexField(indexField), ParentIndexField(parentIndexField), FieldCount(fieldCount), FileFieldCount(fileFieldCount), LayoutHash(layoutHash), Fields(fields)
{
}
@@ -44,6 +44,12 @@ uint32 DB2Meta::GetRecordSize() const
{
for (uint8 j = 0; j < Fields[i].ArraySize; ++j)
{
if (i >= FileFieldCount && i == ParentIndexField)
{
size += 4;
continue;
}
switch (Fields[i].Type)
{
case FT_BYTE:
@@ -87,6 +93,12 @@ uint32 DB2Meta::GetIndexFieldOffset() const
{
for (uint8 j = 0; j < Fields[i].ArraySize; ++j)
{
if (i >= int32(FileFieldCount) && i == ParentIndexField)
{
offset += 4;
continue;
}
switch (Fields[i].Type)
{
case FT_BYTE:
@@ -197,7 +209,7 @@ bool DB2Meta::IsSignedField(uint32 field) const
default:
break;
}
if (field == uint32(IndexField))
if (field == uint32(IndexField) || field == uint32(ParentIndexField))
return false;
return Fields[field].IsSigned;