From 02bcc0f2ed1c9d9e7206fda15a871e8ee26081b5 Mon Sep 17 00:00:00 2001 From: AlexKerman Date: Mon, 21 Oct 2024 13:09:30 +0500 Subject: [PATCH 1/3] Make table alias accessible from MySqlDbColumn Signed-off-by: AlexKerman --- src/MySqlConnector/MySqlDbColumn.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/MySqlConnector/MySqlDbColumn.cs b/src/MySqlConnector/MySqlDbColumn.cs index 9710a8035..35843d54f 100644 --- a/src/MySqlConnector/MySqlDbColumn.cs +++ b/src/MySqlConnector/MySqlDbColumn.cs @@ -22,6 +22,7 @@ internal MySqlDbColumn(int ordinal, ColumnDefinitionPayload column, bool allowZe BaseColumnName = column.PhysicalName; BaseSchemaName = column.SchemaName; BaseTableName = column.PhysicalTable; + TableName = column.Table; ColumnName = column.Name; ColumnOrdinal = ordinal; ColumnSize = columnSize > int.MaxValue ? int.MaxValue : unchecked((int) columnSize); @@ -50,5 +51,6 @@ internal MySqlDbColumn(int ordinal, ColumnDefinitionPayload column, bool allowZe ProviderType = mySqlDbType; } + public string TableName { get; } public MySqlDbType ProviderType { get; } } From fb239d69731b4aa6bfaa4c76aa85fef05ce617ee Mon Sep 17 00:00:00 2001 From: Bradley Grainger Date: Sun, 27 Oct 2024 20:06:42 -0700 Subject: [PATCH 2/3] Add tests for MySqlDbColumn.TableName. Signed-off-by: Bradley Grainger --- tests/IntegrationTests/QueryTests.cs | 42 ++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/tests/IntegrationTests/QueryTests.cs b/tests/IntegrationTests/QueryTests.cs index 051e88c30..8e40848e2 100644 --- a/tests/IntegrationTests/QueryTests.cs +++ b/tests/IntegrationTests/QueryTests.cs @@ -933,6 +933,48 @@ public void GetColumnSchemaAfterNextResult() Assert.False(reader.NextResult()); Assert.Empty(reader.GetColumnSchema()); } + + [Fact] + public void GetColumnSchemaForTableAlias() + { + using var cmd = m_database.Connection.CreateCommand(); + cmd.CommandText = """ + drop table if exists column_schema_table2; + drop table if exists column_schema_table1; + create table column_schema_table1(id int not null primary key); + create table column_schema_table2(id int not null primary key, + table1_id1 int not null, + table1_id2 int not null, + foreign key (table1_id1) references column_schema_table1(id), + foreign key (table1_id2) references column_schema_table1(id)); + insert into column_schema_table1(id) values(1),(2); + insert into column_schema_table2(id, table1_id1, table1_id2) values(3, 1, 2); + """; + cmd.ExecuteNonQuery(); + + cmd.CommandText = """ + select t2.id as id2, t1a.id as ida, t1b.id as idb + from column_schema_table2 t2 + join column_schema_table1 t1a on t2.table1_id1 = t1a.id + join column_schema_table1 t1b on t2.table1_id2 = t1b.id; + """; + using var reader = cmd.ExecuteReader(); + Assert.True(reader.Read()); + var schema = reader.GetColumnSchema(); + Assert.Equal(3, schema.Count); + Assert.Equal("id2", schema[0].ColumnName); + Assert.Equal("ida", schema[1].ColumnName); + Assert.Equal("idb", schema[2].ColumnName); + Assert.Equal("id", schema[0].BaseColumnName); + Assert.Equal("id", schema[1].BaseColumnName); + Assert.Equal("id", schema[2].BaseColumnName); + Assert.Equal("column_schema_table2", schema[0].BaseTableName); + Assert.Equal("column_schema_table1", schema[1].BaseTableName); + Assert.Equal("column_schema_table1", schema[2].BaseTableName); + Assert.Equal("t2", ((MySqlDbColumn) schema[0]).TableName); + Assert.Equal("t1a", ((MySqlDbColumn) schema[1]).TableName); + Assert.Equal("t1b", ((MySqlDbColumn) schema[2]).TableName); + } #endif private void UseReaderWithoutDisposingThread(object obj) From 31c0852208fd28b6aa18383be64cefbf40e03825 Mon Sep 17 00:00:00 2001 From: Bradley Grainger Date: Sun, 27 Oct 2024 20:14:33 -0700 Subject: [PATCH 3/3] Add documentation comments for TableName. Signed-off-by: Bradley Grainger --- src/MySqlConnector/MySqlDbColumn.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/MySqlConnector/MySqlDbColumn.cs b/src/MySqlConnector/MySqlDbColumn.cs index 35843d54f..b55e9a02a 100644 --- a/src/MySqlConnector/MySqlDbColumn.cs +++ b/src/MySqlConnector/MySqlDbColumn.cs @@ -22,7 +22,6 @@ internal MySqlDbColumn(int ordinal, ColumnDefinitionPayload column, bool allowZe BaseColumnName = column.PhysicalName; BaseSchemaName = column.SchemaName; BaseTableName = column.PhysicalTable; - TableName = column.Table; ColumnName = column.Name; ColumnOrdinal = ordinal; ColumnSize = columnSize > int.MaxValue ? int.MaxValue : unchecked((int) columnSize); @@ -49,8 +48,13 @@ internal MySqlDbColumn(int ordinal, ColumnDefinitionPayload column, bool allowZe } NumericScale = column.Decimals; ProviderType = mySqlDbType; + TableName = column.Table; } - public string TableName { get; } public MySqlDbType ProviderType { get; } + + /// + /// Gets the name of the table that the column belongs to. This will be the alias if the table is aliased in the query. + /// + public string TableName { get; } }