Skip to content

Commit 3252b8b

Browse files
committed
Return null from GetSchemaTable when there's no result set. Fixes #877
1 parent da1e39e commit 3252b8b

File tree

4 files changed

+9
-18
lines changed

4 files changed

+9
-18
lines changed

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ public override long GetChars(int ordinal, long dataOffset, char[]? buffer, int
293293
public override int VisibleFieldCount => FieldCount;
294294

295295
#if !NETSTANDARD1_3
296-
public override DataTable GetSchemaTable() => m_schemaTable ??= BuildSchemaTable();
296+
public override DataTable? GetSchemaTable() => m_schemaTable ??= BuildSchemaTable();
297297

298298
public override void Close() => DisposeAsync(IOBehavior.Synchronous, CancellationToken.None).GetAwaiter().GetResult();
299299
#endif
@@ -409,14 +409,14 @@ internal static async Task<MySqlDataReader> CreateAsync(CommandListPosition comm
409409
}
410410

411411
#if !NETSTANDARD1_3
412-
internal DataTable BuildSchemaTable()
412+
internal DataTable? BuildSchemaTable()
413413
{
414-
var schemaTable = new DataTable("SchemaTable") { Locale = CultureInfo.InvariantCulture };
414+
var columnDefinitions = m_resultSet?.ColumnDefinitions;
415+
if (columnDefinitions is null || m_resultSet!.ContainsCommandParameters)
416+
return null;
415417

416-
var colDefinitions = m_resultSet?.ColumnDefinitions;
417-
if (colDefinitions is null || m_resultSet!.ContainsCommandParameters)
418-
return schemaTable;
419-
schemaTable.MinimumCapacity = colDefinitions.Length;
418+
var schemaTable = new DataTable("SchemaTable") { Locale = CultureInfo.InvariantCulture };
419+
schemaTable.MinimumCapacity = columnDefinitions.Length;
420420

421421
var columnName = new DataColumn(SchemaTableColumn.ColumnName, typeof(string));
422422
var ordinal = new DataColumn(SchemaTableColumn.ColumnOrdinal, typeof(int));

tests/Conformance.Tests/DataReaderTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public DataReaderTests(SelectValueFixture fixture)
1313
[Fact(Skip = "Deliberately throws InvalidCastException")]
1414
public override void GetTextReader_returns_empty_for_null_String() { }
1515

16-
[Fact(Skip = "https://github.com/mysql-net/MySqlConnector/issues/744")]
16+
[Fact(Skip = "https://github.com/mysql-net/MySqlConnector/issues/877")]
1717
public override void GetSchemaTable_throws_after_Delete() { }
1818
}
1919
}

tests/SideBySide/DataTypes.cs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1192,14 +1192,7 @@ public void GetSchemaTableAfterNextResult()
11921192
}
11931193

11941194
Assert.False(reader.NextResult());
1195-
#if BASELINE
11961195
Assert.Null(reader.GetSchemaTable());
1197-
#else
1198-
table = reader.GetSchemaTable();
1199-
Assert.NotNull(table);
1200-
Assert.Empty(table.Rows);
1201-
Assert.Empty(table.Columns);
1202-
#endif
12031196
}
12041197
#endif
12051198

tests/SideBySide/StoredProcedureTests.cs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -189,9 +189,7 @@ public async Task GetSchemaTableForNoResultSet(bool ignorePrepare)
189189
using var reader = await cmd.ExecuteReaderAsync();
190190
Assert.False(await reader.ReadAsync());
191191
var table = reader.GetSchemaTable();
192-
Assert.NotNull(table);
193-
Assert.Empty(table.Rows);
194-
Assert.Empty(table.Columns);
192+
Assert.Null(table);
195193
Assert.False(await reader.NextResultAsync());
196194
}
197195
#endif

0 commit comments

Comments
 (0)