Skip to content

Commit 3c3d557

Browse files
committed
Fix NullReferenceException in GetSchemaTable. Fixes #580
1 parent 0de2496 commit 3c3d557

File tree

2 files changed

+24
-3
lines changed

2 files changed

+24
-3
lines changed

src/MySqlConnector/MySql.Data.MySqlClient/MySqlDataReader.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -234,10 +234,7 @@ public override long GetChars(int ordinal, long dataOffset, char[] buffer, int b
234234
public override DataTable GetSchemaTable()
235235
{
236236
if (m_schemaTable == null)
237-
{
238237
m_schemaTable = BuildSchemaTable();
239-
}
240-
241238
return m_schemaTable;
242239
}
243240

@@ -309,6 +306,8 @@ internal async Task ReadFirstResultSetAsync(IOBehavior ioBehavior)
309306
internal DataTable BuildSchemaTable()
310307
{
311308
var colDefinitions = GetResultSet().ColumnDefinitions;
309+
if (colDefinitions == null)
310+
return null;
312311
DataTable schemaTable = new DataTable("SchemaTable");
313312
schemaTable.Locale = CultureInfo.InvariantCulture;
314313
schemaTable.MinimumCapacity = colDefinitions.Length;

tests/SideBySide/DataTypes.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1149,6 +1149,28 @@ public void GetSchemaTableTwice()
11491149
}
11501150
}
11511151
}
1152+
1153+
[Fact]
1154+
public void GetSchemaTableAfterNextResult()
1155+
{
1156+
using (var command = Connection.CreateCommand())
1157+
{
1158+
command.CommandText = "select Int16 from datatypes_integers;";
1159+
using (var reader = command.ExecuteReader())
1160+
{
1161+
var table = reader.GetSchemaTable();
1162+
Assert.NotNull(table);
1163+
Assert.Equal("Int16", table.Rows[0]["ColumnName"]);
1164+
1165+
while (reader.Read())
1166+
{
1167+
}
1168+
1169+
Assert.False(reader.NextResult());
1170+
Assert.Null(reader.GetSchemaTable());
1171+
}
1172+
}
1173+
}
11521174
#endif
11531175

11541176
#if !BASELINE

0 commit comments

Comments
 (0)