Skip to content

Commit e132a64

Browse files
authored
Merge pull request #1522 from AlexKerman/master
Make table alias accessible from MySqlDbColumn.
2 parents 5ec770b + 31c0852 commit e132a64

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

src/MySqlConnector/MySqlDbColumn.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,13 @@ internal MySqlDbColumn(int ordinal, ColumnDefinitionPayload column, bool allowZe
4848
}
4949
NumericScale = column.Decimals;
5050
ProviderType = mySqlDbType;
51+
TableName = column.Table;
5152
}
5253

5354
public MySqlDbType ProviderType { get; }
55+
56+
/// <summary>
57+
/// Gets the name of the table that the column belongs to. This will be the alias if the table is aliased in the query.
58+
/// </summary>
59+
public string TableName { get; }
5460
}

tests/IntegrationTests/QueryTests.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -933,6 +933,48 @@ public void GetColumnSchemaAfterNextResult()
933933
Assert.False(reader.NextResult());
934934
Assert.Empty(reader.GetColumnSchema());
935935
}
936+
937+
[Fact]
938+
public void GetColumnSchemaForTableAlias()
939+
{
940+
using var cmd = m_database.Connection.CreateCommand();
941+
cmd.CommandText = """
942+
drop table if exists column_schema_table2;
943+
drop table if exists column_schema_table1;
944+
create table column_schema_table1(id int not null primary key);
945+
create table column_schema_table2(id int not null primary key,
946+
table1_id1 int not null,
947+
table1_id2 int not null,
948+
foreign key (table1_id1) references column_schema_table1(id),
949+
foreign key (table1_id2) references column_schema_table1(id));
950+
insert into column_schema_table1(id) values(1),(2);
951+
insert into column_schema_table2(id, table1_id1, table1_id2) values(3, 1, 2);
952+
""";
953+
cmd.ExecuteNonQuery();
954+
955+
cmd.CommandText = """
956+
select t2.id as id2, t1a.id as ida, t1b.id as idb
957+
from column_schema_table2 t2
958+
join column_schema_table1 t1a on t2.table1_id1 = t1a.id
959+
join column_schema_table1 t1b on t2.table1_id2 = t1b.id;
960+
""";
961+
using var reader = cmd.ExecuteReader();
962+
Assert.True(reader.Read());
963+
var schema = reader.GetColumnSchema();
964+
Assert.Equal(3, schema.Count);
965+
Assert.Equal("id2", schema[0].ColumnName);
966+
Assert.Equal("ida", schema[1].ColumnName);
967+
Assert.Equal("idb", schema[2].ColumnName);
968+
Assert.Equal("id", schema[0].BaseColumnName);
969+
Assert.Equal("id", schema[1].BaseColumnName);
970+
Assert.Equal("id", schema[2].BaseColumnName);
971+
Assert.Equal("column_schema_table2", schema[0].BaseTableName);
972+
Assert.Equal("column_schema_table1", schema[1].BaseTableName);
973+
Assert.Equal("column_schema_table1", schema[2].BaseTableName);
974+
Assert.Equal("t2", ((MySqlDbColumn) schema[0]).TableName);
975+
Assert.Equal("t1a", ((MySqlDbColumn) schema[1]).TableName);
976+
Assert.Equal("t1b", ((MySqlDbColumn) schema[2]).TableName);
977+
}
936978
#endif
937979

938980
private void UseReaderWithoutDisposingThread(object obj)

0 commit comments

Comments
 (0)