Improve declarative procedure result-set binding
This commit is contained in:
@@ -101,6 +101,24 @@ namespace DynamORM.Tests.Helpers
|
||||
public int Status { get; set; }
|
||||
}
|
||||
|
||||
public class ProcedureAttributedFieldResult
|
||||
{
|
||||
[ProcedureResult(0)]
|
||||
public string FirstCode;
|
||||
|
||||
[ProcedureResult(1)]
|
||||
public System.Collections.Generic.List<string> Codes;
|
||||
|
||||
[ProcedureResult(2, ColumnName = "State")]
|
||||
public System.Collections.Generic.IEnumerable<int> States;
|
||||
|
||||
[ProcedureResult(3)]
|
||||
public Users User;
|
||||
|
||||
[ProcedureResult(4, Name = "users_table")]
|
||||
public DataTable UsersTable;
|
||||
}
|
||||
|
||||
public class ProcedureMultiResultArgs : IProcedureParameters<ProcedureMultiResult>
|
||||
{
|
||||
[ProcedureParameter("status", Direction = ParameterDirection.Output, Order = 1, DbType = DbType.Int32)]
|
||||
|
||||
@@ -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)));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user