Skip to content

Commit

Permalink
Merge pull request #31 from KalopsiaTwilight/fix/constructrow-exception
Browse files Browse the repository at this point in the history
Fix System.MissingMethodException on constructing a row with a string[]
  • Loading branch information
Marlamin authored Jan 18, 2025
2 parents 5bc5950 + 515b3c1 commit 2a02a8b
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 2 deletions.
15 changes: 15 additions & 0 deletions DBCD.Tests/WritingTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,21 @@ public void TestWritingNewRowDb2WithArrayField()
Assert.AreEqual(116146, outputStorage.Count);
}

[TestMethod]
public void TestWritingNewRowDb2WithArrayOfStringsField()
{
DBCD dbcd = new(wagoDBCProvider, githubDBDProvider);
IDBCDStorage storage = dbcd.Load("BattlePetEffectProperties", "9.2.7.45745");

storage.Add(10, storage.ConstructRow(10));
storage.Save(Path.Join(OutputPath, "BattlePetEffectProperties.db2"));

DBCD localDbcd = new(new FilesystemDBCProvider(OutputPath), githubDBDProvider);
IDBCDStorage outputStorage = localDbcd.Load("BattlePetEffectProperties", "9.2.7.45745");

Assert.AreEqual(134, outputStorage.Count);
}

[TestMethod]
public void TestSavingSameStorageTwice()
{
Expand Down
13 changes: 11 additions & 2 deletions DBCD/DBCDStorage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -204,10 +204,19 @@ public DBCDRow ConstructRow(int index)
foreach (var arrayField in arrayFields)
{
var count = arrayField.GetCustomAttribute<CardinalityAttribute>().Count;
Array rowRecords = Array.CreateInstance(arrayField.FieldType.GetElementType(), count);
var elementType = arrayField.FieldType.GetElementType();
var isStringField = elementType == typeof(string);

Array rowRecords = Array.CreateInstance(elementType, count);
for (var i = 0; i < count; i++)
{
rowRecords.SetValue(Activator.CreateInstance(arrayField.FieldType.GetElementType()), i);
if (isStringField)
{
rowRecords.SetValue(string.Empty, i);
} else
{
rowRecords.SetValue(Activator.CreateInstance(elementType), i);
}
}
arrayField.SetValue(raw, rowRecords);
}
Expand Down

0 comments on commit 2a02a8b

Please sign in to comment.