Improve declarative procedure result-set binding

This commit is contained in:
2026-02-27 15:57:06 +01:00
parent 99ff6b3d29
commit 6ebda34a04
6 changed files with 194 additions and 67 deletions

View File

@@ -206,6 +206,36 @@ namespace DynamORM.Tests.Procedure
}
}
[Test]
public void TestDeclaredResultCanReadAttributedFieldResultSets()
{
using (var reader = new FakeMultiResultDataReader(
Tuple.Create(new[] { "Code" }, new[] { typeof(string) }, new[] { new object[] { "FIELD-FIRST" }, new object[] { "FIELD-SECOND" } }),
Tuple.Create(new[] { "Code" }, new[] { typeof(string) }, new[] { new object[] { "C" }, new object[] { "D" } }),
Tuple.Create(new[] { "State" }, new[] { typeof(int) }, new[] { new object[] { 30 }, new object[] { 40 } }),
Tuple.Create(
new[] { "id", "code", "first" },
new[] { typeof(long), typeof(string), typeof(string) },
new[] { new object[] { 4L, "U4", "Four" } }),
Tuple.Create(
new[] { "id", "code", "first" },
new[] { typeof(long), typeof(string), typeof(string) },
new[] { new object[] { 5L, "U5", "Five" }, new object[] { 6L, "U6", "Six" } })))
{
var result = DynamicProcedureResultBinder.ReadDeclaredResult(typeof(ProcedureAttributedFieldResult), reader) as ProcedureAttributedFieldResult;
Assert.NotNull(result);
Assert.AreEqual("FIELD-FIRST", result.FirstCode);
CollectionAssert.AreEqual(new[] { "C", "D" }, result.Codes);
CollectionAssert.AreEqual(new[] { 30, 40 }, result.States);
Assert.NotNull(result.User);
Assert.AreEqual(4L, result.User.Id);
Assert.NotNull(result.UsersTable);
Assert.AreEqual("users_table", result.UsersTable.TableName);
Assert.AreEqual(2, result.UsersTable.Rows.Count);
}
}
[Test]
public void TestDeclaredResultPayloadCanAugmentReaderResult()
{
@@ -233,9 +263,10 @@ namespace DynamORM.Tests.Procedure
[Test]
public void TestDeclaredResultBindingDetectionSupportsAttributedResults()
{
Assert.IsTrue(DynamicProcedureResultBinder.HasDeclaredResultBinding(typeof(ProcedureMultiResult)));
Assert.IsTrue(DynamicProcedureResultBinder.HasDeclaredResultBinding(typeof(ProcedureAttributedResult)));
Assert.IsFalse(DynamicProcedureResultBinder.HasDeclaredResultBinding(typeof(ProcedureParameterResult)));
Assert.IsTrue(DynamicProcedureResultBinder.CanReadResults(typeof(ProcedureMultiResult)));
Assert.IsTrue(DynamicProcedureResultBinder.CanReadResults(typeof(ProcedureAttributedResult)));
Assert.IsTrue(DynamicProcedureResultBinder.CanReadResults(typeof(ProcedureAttributedFieldResult)));
Assert.IsFalse(DynamicProcedureResultBinder.CanReadResults(typeof(ProcedureParameterResult)));
}
}
}