Skip to content

Commit

Permalink
Add more tests for MySqlDataReader boundary conditions.
Browse files Browse the repository at this point in the history
  • Loading branch information
bgrainger committed Aug 16, 2023
1 parent 7c54397 commit ca63a91
Showing 1 changed file with 97 additions and 1 deletion.
98 changes: 97 additions & 1 deletion tests/IntegrationTests/QueryTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -122,14 +122,21 @@ public void GetOrdinalAfterNextResult()
public void GetOrdinalBeforeAndAfterRead()
{
using var cmd = m_database.Connection.CreateCommand();
cmd.CommandText = "select 0 as zero, 1 as one;";
cmd.CommandText = "select 0 as zero, 1 as one; select 2 as two;";

using var reader = cmd.ExecuteReader();
Assert.Equal(1, reader.GetOrdinal("one"));
Assert.True(reader.Read());
Assert.Equal(1, reader.GetOrdinal("one"));
Assert.False(reader.Read());
Assert.Equal(1, reader.GetOrdinal("one"));

Assert.True(reader.NextResult());
Assert.Equal(0, reader.GetOrdinal("two"));
Assert.True(reader.Read());
Assert.Equal(0, reader.GetOrdinal("two"));
Assert.False(reader.Read());
Assert.Equal(0, reader.GetOrdinal("two"));
}

[Fact]
Expand Down Expand Up @@ -727,6 +734,44 @@ public void UseReaderWithoutDisposing()
throw ex;
}

[Fact]
public void GetNameAfterNextResult()
{
using var cmd = m_database.Connection.CreateCommand();
cmd.CommandText = "select 1 as a;";
using var reader = cmd.ExecuteReader();
Assert.False(reader.NextResult());
#if MYSQL_DATA
Assert.Throws<IndexOutOfRangeException>(() => reader.GetName(0));
#else
Assert.Throws<InvalidOperationException>(() => reader.GetName(0));
#endif
}

[Fact]
public void GetNameBeforeAndAfterRead()
{
using var cmd = m_database.Connection.CreateCommand();
cmd.CommandText = "select '1' as a; select 1.0 as b;";
using var reader = cmd.ExecuteReader();
Assert.Equal("a", reader.GetName(0));

Assert.True(reader.Read());
Assert.Equal("a", reader.GetName(0));

Assert.False(reader.Read());
Assert.Equal("a", reader.GetName(0));

Assert.True(reader.NextResult());
Assert.Equal("b", reader.GetName(0));

Assert.True(reader.Read());
Assert.Equal("b", reader.GetName(0));

Assert.False(reader.Read());
Assert.Equal("b", reader.GetName(0));
}

[Theory]
#if MYSQL_DATA
[InlineData("null", typeof(string))]
Expand Down Expand Up @@ -778,6 +823,30 @@ public void GetFieldTypeAfterNextResult()
#endif
}

[Fact]
public void GetFieldTypeBeforeAndAfterRead()
{
using var cmd = m_database.Connection.CreateCommand();
cmd.CommandText = "select '1' as a; select 1.0 as b;";
using var reader = cmd.ExecuteReader();
Assert.Equal(typeof(string), reader.GetFieldType(0));

Assert.True(reader.Read());
Assert.Equal(typeof(string), reader.GetFieldType(0));

Assert.False(reader.Read());
Assert.Equal(typeof(string), reader.GetFieldType(0));

Assert.True(reader.NextResult());
Assert.Equal(typeof(decimal), reader.GetFieldType(0));

Assert.True(reader.Read());
Assert.Equal(typeof(decimal), reader.GetFieldType(0));

Assert.False(reader.Read());
Assert.Equal(typeof(decimal), reader.GetFieldType(0));
}

[Theory]
#if MYSQL_DATA
[InlineData("null", "VARCHAR")]
Expand Down Expand Up @@ -828,6 +897,30 @@ public void GetDataTypeNameAfterNextResult()
#endif
}

[Fact]
public void GetDataTypeNameBeforeAndAfterRead()
{
using var cmd = m_database.Connection.CreateCommand();
cmd.CommandText = "select '1' as a; select 1.0 as b;";
using var reader = cmd.ExecuteReader();
Assert.Equal("VARCHAR", reader.GetDataTypeName(0));

Assert.True(reader.Read());
Assert.Equal("VARCHAR", reader.GetDataTypeName(0));

Assert.False(reader.Read());
Assert.Equal("VARCHAR", reader.GetDataTypeName(0));

Assert.True(reader.NextResult());
Assert.Equal("DECIMAL", reader.GetDataTypeName(0));

Assert.True(reader.Read());
Assert.Equal("DECIMAL", reader.GetDataTypeName(0));

Assert.False(reader.Read());
Assert.Equal("DECIMAL", reader.GetDataTypeName(0));
}

#if !MYSQL_DATA
[Fact]
public void GetColumnSchemaAfterNextResult()
Expand Down Expand Up @@ -1078,6 +1171,9 @@ public void HasRowsRepeated()
Assert.True(reader.HasRows);
Assert.True(reader.HasRows);
Assert.True(reader.HasRows);

Assert.False(reader.NextResult());
Assert.False(reader.HasRows);
}

[Fact]
Expand Down

0 comments on commit ca63a91

Please sign in to comment.