Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3868,6 +3868,7 @@ internal bool TryReadColumnInternal(int i, bool readHeaderOnly = false, bool for
else
{
// we have read past the column somehow, this is an error
Debug.Assert(false, "We have read past the column somehow, this is an error");
}
}
else
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ public static class DataReaderStreamsTest
{
[SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)]
[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(GetCommandBehaviours))]
public static async Task GetFieldValueAsync_OfStream(CommandBehavior behavior)
[MemberData(nameof(GetCommandBehavioursAndIsAsync))]
public static async Task GetFieldValueAsync_OfStream(CommandBehavior behavior, bool isExecuteAsync)
{
const int PacketSize = 512; // force minimun packet size so that the test data spans multiple packets to test sequential access spanning
string connectionString = SetConnectionStringPacketSize(DataTestUtility.TCPConnectionString, PacketSize);
Expand All @@ -31,9 +31,9 @@ public static async Task GetFieldValueAsync_OfStream(CommandBehavior behavior)
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader(behavior))
using (SqlDataReader reader = await ExecuteReader(command, behavior, isExecuteAsync))
{
if (reader.Read())
if (await Read(reader, isExecuteAsync))
{
using (MemoryStream buffer = new MemoryStream(originalData.Length))
using (Stream stream = await reader.GetFieldValueAsync<Stream>(1))
Expand All @@ -54,8 +54,8 @@ public static async Task GetFieldValueAsync_OfStream(CommandBehavior behavior)

[SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)]
[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(GetCommandBehaviours))]
public static async Task GetFieldValueAsync_OfXmlReader(CommandBehavior behavior)
[MemberData(nameof(GetCommandBehavioursAndIsAsync))]
public static async Task GetFieldValueAsync_OfXmlReader(CommandBehavior behavior, bool isExecuteAsync)
{
const int PacketSize = 512; // force minimun packet size so that the test data spans multiple packets to test sequential access spanning
string connectionString = SetConnectionStringPacketSize(DataTestUtility.TCPConnectionString, PacketSize);
Expand All @@ -68,9 +68,9 @@ public static async Task GetFieldValueAsync_OfXmlReader(CommandBehavior behavior
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader(behavior))
using (SqlDataReader reader = await ExecuteReader(command, behavior, isExecuteAsync))
{
if (reader.Read())
if (await Read(reader, isExecuteAsync))
{
using (XmlReader xmlReader = await reader.GetFieldValueAsync<XmlReader>(1))
{
Expand All @@ -89,8 +89,8 @@ public static async Task GetFieldValueAsync_OfXmlReader(CommandBehavior behavior

[SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)]
[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(GetCommandBehaviours))]
public static async Task GetFieldValueAsync_OfTextReader(CommandBehavior behavior)
[MemberData(nameof(GetCommandBehavioursAndIsAsync))]
public static async Task GetFieldValueAsync_OfTextReader(CommandBehavior behavior, bool isExecuteAsync)
{
const int PacketSize = 512; // force minimun packet size so that the test data spans multiple packets to test sequential access spanning
string connectionString = SetConnectionStringPacketSize(DataTestUtility.TCPConnectionString, PacketSize);
Expand All @@ -103,9 +103,9 @@ public static async Task GetFieldValueAsync_OfTextReader(CommandBehavior behavio
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader(behavior))
using (SqlDataReader reader = await ExecuteReader(command, behavior, isExecuteAsync))
{
if (reader.Read())
if (await Read(reader, isExecuteAsync))
{
using (TextReader textReader = await reader.GetFieldValueAsync<TextReader>(1))
{
Expand All @@ -124,8 +124,8 @@ public static async Task GetFieldValueAsync_OfTextReader(CommandBehavior behavio

[SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)]
[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(GetCommandBehaviours))]
public static void GetFieldValue_OfXmlReader(CommandBehavior behavior)
[MemberData(nameof(GetCommandBehavioursAndIsAsync))]
public static async void GetFieldValue_OfXmlReader(CommandBehavior behavior, bool isExecuteAsync)
{
const int PacketSize = 512; // force minimun packet size so that the test data spans multiple packets to test sequential access spanning
string connectionString = SetConnectionStringPacketSize(DataTestUtility.TCPConnectionString, PacketSize);
Expand All @@ -138,9 +138,9 @@ public static void GetFieldValue_OfXmlReader(CommandBehavior behavior)
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader(behavior))
using (SqlDataReader reader = await ExecuteReader(command, behavior, isExecuteAsync))
{
if (reader.Read())
if (await Read(reader, isExecuteAsync))
{
using (XmlReader xmlReader = reader.GetFieldValue<XmlReader>(1))
{
Expand All @@ -159,8 +159,8 @@ public static void GetFieldValue_OfXmlReader(CommandBehavior behavior)

[SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)]
[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(GetCommandBehaviours))]
public static void GetFieldValue_OfStream(CommandBehavior behavior)
[MemberData(nameof(GetCommandBehavioursAndIsAsync))]
public static async void GetFieldValue_OfStream(CommandBehavior behavior, bool isExecuteAsync)
{
const int PacketSize = 512; // force minimun packet size so that the test data spans multiple packets to test sequential access spanning
string connectionString = SetConnectionStringPacketSize(DataTestUtility.TCPConnectionString, PacketSize);
Expand All @@ -173,9 +173,9 @@ public static void GetFieldValue_OfStream(CommandBehavior behavior)
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader(behavior))
using (SqlDataReader reader = await ExecuteReader(command, behavior, isExecuteAsync))
{
if (reader.Read())
if (await Read(reader, isExecuteAsync))
{
using (Stream stream = reader.GetFieldValue<Stream>(1))
{
Expand All @@ -193,8 +193,8 @@ public static void GetFieldValue_OfStream(CommandBehavior behavior)

[SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)]
[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(GetCommandBehaviours))]
public static void GetFieldValue_OfTextReader(CommandBehavior behavior)
[MemberData(nameof(GetCommandBehavioursAndIsAsync))]
public static async void GetFieldValue_OfTextReader(CommandBehavior behavior, bool isExecuteAsync)
{
const int PacketSize = 512; // force minimun packet size so that the test data spans multiple packets to test sequential access spanning
string connectionString = SetConnectionStringPacketSize(DataTestUtility.TCPConnectionString, PacketSize);
Expand All @@ -207,9 +207,9 @@ public static void GetFieldValue_OfTextReader(CommandBehavior behavior)
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader(behavior))
using (SqlDataReader reader = await ExecuteReader(command, behavior, isExecuteAsync))
{
if (reader.Read())
if (await Read(reader, isExecuteAsync))
{
using (TextReader textReader = reader.GetFieldValue<TextReader>(1))
{
Expand All @@ -228,8 +228,8 @@ public static void GetFieldValue_OfTextReader(CommandBehavior behavior)

[SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)]
[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(GetCommandBehaviours))]
public static void GetStream(CommandBehavior behavior)
[MemberData(nameof(GetCommandBehavioursAndIsAsync))]
public static async void GetStream(CommandBehavior behavior, bool isExecuteAsync)
{
const int PacketSize = 512; // force minimun packet size so that the test data spans multiple packets to test sequential access spanning
string connectionString = SetConnectionStringPacketSize(DataTestUtility.TCPConnectionString, PacketSize);
Expand All @@ -242,9 +242,9 @@ public static void GetStream(CommandBehavior behavior)
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader(behavior))
using (SqlDataReader reader = await ExecuteReader(command, behavior, isExecuteAsync))
{
if (reader.Read())
if (await Read(reader, isExecuteAsync))
{
using (MemoryStream buffer = new MemoryStream(originalData.Length))
using (Stream stream = reader.GetStream(1))
Expand All @@ -265,8 +265,8 @@ public static void GetStream(CommandBehavior behavior)

[SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)]
[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(GetCommandBehaviours))]
public static void GetXmlReader(CommandBehavior behavior)
[MemberData(nameof(GetCommandBehavioursAndIsAsync))]
public static async void GetXmlReader(CommandBehavior behavior, bool isExecuteAsync)
{
const int PacketSize = 512; // force minimun packet size so that the test data spans multiple packets to test sequential access spanning
string connectionString = SetConnectionStringPacketSize(DataTestUtility.TCPConnectionString, PacketSize);
Expand All @@ -279,9 +279,9 @@ public static void GetXmlReader(CommandBehavior behavior)
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader(behavior))
using (SqlDataReader reader = await ExecuteReader(command, behavior, isExecuteAsync))
{
if (reader.Read())
if (await Read(reader, isExecuteAsync))
{
using (XmlReader xmlReader = reader.GetXmlReader(1))
{
Expand All @@ -300,8 +300,8 @@ public static void GetXmlReader(CommandBehavior behavior)

[SkipOnTargetFramework(TargetFrameworkMonikers.NetFramework)]
[ConditionalTheory(typeof(DataTestUtility), nameof(DataTestUtility.AreConnStringsSetup))]
[MemberData(nameof(GetCommandBehaviours))]
public static void GetTextReader(CommandBehavior behavior)
[MemberData(nameof(GetCommandBehavioursAndIsAsync))]
public static async void GetTextReader(CommandBehavior behavior, bool isExecuteAsync)
{
const int PacketSize = 512; // force minimun packet size so that the test data spans multiple packets to test sequential access spanning
string connectionString = SetConnectionStringPacketSize(DataTestUtility.TCPConnectionString, PacketSize);
Expand All @@ -314,9 +314,9 @@ public static void GetTextReader(CommandBehavior behavior)
using (SqlCommand command = new SqlCommand(query, connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader(behavior))
using (SqlDataReader reader = await ExecuteReader(command, behavior, isExecuteAsync))
{
if (reader.Read())
if (await Read(reader, isExecuteAsync))
{
using (TextReader textReader = reader.GetTextReader(1))
{
Expand Down Expand Up @@ -407,7 +407,7 @@ public static void NullStreamProperties(CommandBehavior behavior, AccessorType a

using (TextReader textReader = GetValue<TextReader>(reader, 1, accessorType))
{
Assert.Equal(textReader.ReadToEnd(), string.Empty);
Assert.Equal(textReader.ReadToEnd(), string.Empty);
}

using (Stream stream = GetValue<Stream>(reader, 2, accessorType))
Expand All @@ -420,6 +420,12 @@ public static void NullStreamProperties(CommandBehavior behavior, AccessorType a

}

private static async Task<SqlDataReader> ExecuteReader(SqlCommand command, CommandBehavior behavior, bool isExecuteAsync)
=> isExecuteAsync ? await command.ExecuteReaderAsync(behavior) : command.ExecuteReader(behavior);

private static async Task<bool> Read(SqlDataReader reader, bool isExecuteAsync)
=> isExecuteAsync ? await reader.ReadAsync() : reader.Read();

public static IEnumerable<object[]> GetCommandBehaviourAndAccessorTypes()
{
foreach (CommandBehavior behavior in new CommandBehavior[] { CommandBehavior.Default, CommandBehavior.SequentialAccess })
Expand All @@ -431,10 +437,13 @@ public static IEnumerable<object[]> GetCommandBehaviourAndAccessorTypes()
}
}

public static IEnumerable<object[]> GetCommandBehaviours()
public static IEnumerable<object[]> GetCommandBehavioursAndIsAsync()
{
yield return new object[] { CommandBehavior.Default };
yield return new object[] { CommandBehavior.SequentialAccess };
foreach (CommandBehavior behavior in new CommandBehavior[] { CommandBehavior.Default, CommandBehavior.SequentialAccess })
{
yield return new object[] { behavior, true };
yield return new object[] { behavior, false };
}
}

public enum AccessorType
Expand Down