public void SqlStream_ExecuteNonQuery_Enumerates_Entire_Stream()
{
int actual = 0;
int expected = 100;
var connection = new Mock<ISqlStreamConnection>();
connection.Setup(c => c.ExecuteNonQuery(It.IsAny<SqlCommand>())).Callback<SqlCommand>((cmd) =>
{
var stream = cmd.Parameters["@stream"].Value as SqlStructuredParameterWrapper<StreamSchema>;
Assert.IsNotNull(stream, "@stream parameter cannot be null.");
foreach (var item in stream)
actual++;
});
using (SqlStream<StreamSchema> target = new SqlStream<StreamSchema>(connection.Object, SqlStreamBehavior.CloseConnection, 10))
{
target.Parameters.Add("@userid", SqlDbType.Int).Value = 1;
target.Parameters.AddStructured<StreamSchema>("@stream", "dbo.StreamUDT", target)
.Map(src => src.Id, "Id", SqlDbType.Int)
.Map(src => src.ProductName, "ProductName", SqlDbType.VarChar, 255)
.Map(src => Convert.ToDecimal(src.Price), "Price", SqlDbType.Decimal, 9, 3);
for (int i = 0; i < expected; i++)
{
target.Write(new StreamSchema
{
Id = i,
ProductName = String.Format("Product {0}", i),
Price = (i + 1.0) - 0.01
});
//simulate I/O
Thread.Sleep(3);
}
}
Assert.AreEqual(expected, actual, "Data wasn't streamed.");
}