From 52b5f86ee0a296bf23c2c49f1edb0efb1f831721 Mon Sep 17 00:00:00 2001 From: dajiaohuang Date: Fri, 16 Oct 2026 05:28:50 +0800 Subject: [PATCH] Fix table diagnostic payload offsets after database header --- src/MasterMemory/MemoryDatabaseBase.cs | 3 ++- tests/MasterMemory.Tests/DatabaseTest.cs | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/MasterMemory/MemoryDatabaseBase.cs b/src/MasterMemory/MemoryDatabaseBase.cs index 1b1bb171..3bcff67d 100644 --- a/src/MasterMemory/MemoryDatabaseBase.cs +++ b/src/MasterMemory/MemoryDatabaseBase.cs @@ -62,7 +62,8 @@ public static TableInfo[] GetTableInfo(byte[] databaseBinary, bool storeTableDat var reader = new MessagePackReader(databaseBinary); var header = formatter.Deserialize(ref reader, HeaderFormatterResolver.StandardOptions); - return header.Select(x => new TableInfo(x.Key, x.Value.Item2, storeTableData ? databaseBinary : null, x.Value.Item1)).ToArray(); + var headerSize = (int)reader.Consumed; + return header.Select(x => new TableInfo(x.Key, x.Value.Item2, storeTableData ? databaseBinary : null, headerSize + x.Value.Item1)).ToArray(); } protected void ValidateTable(IReadOnlyList table, ValidationDatabase database, string pkName, Delegate pkSelector, ValidateResult result) diff --git a/tests/MasterMemory.Tests/DatabaseTest.cs b/tests/MasterMemory.Tests/DatabaseTest.cs index 3c5cc927..2cc02b1f 100644 --- a/tests/MasterMemory.Tests/DatabaseTest.cs +++ b/tests/MasterMemory.Tests/DatabaseTest.cs @@ -51,6 +51,20 @@ public void SingleDb() tableInfo[0].TableName.ShouldBe("s_a_m_p_l_e"); } + [Fact] + public void DumpTableDataAsJson() + { + var samples = CreateData(); + var items = new[] { new TestStructures.ItemMaster { ItemId = 42 } }; + var bin = new DatabaseBuilder().Append(samples).Append(items).Build(); + var tableInfo = MemoryDatabase.GetTableInfo(bin); + + tableInfo.Single(x => x.TableName == "s_a_m_p_l_e").DumpAsJson() + .ShouldBe(MessagePackSerializer.ConvertToJson(MessagePackSerializer.Serialize(samples.OrderBy(x => x.Id).ToArray()))); + tableInfo.Single(x => x.TableName == "item_master").DumpAsJson(MessagePackSerializer.DefaultOptions) + .ShouldBe(MessagePackSerializer.ConvertToJson(MessagePackSerializer.Serialize(items))); + } + [Fact] public void All() {