Skip to content

Commit d3ad6d1

Browse files
committed
Add COLUMN_NAME as fifth restriction for IndexColumns schema.
1 parent 65a73fc commit d3ad6d1

File tree

5 files changed

+30
-4
lines changed

5 files changed

+30
-4
lines changed

docs/content/overview/schema/indexcolumns.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
date: 2022-07-10
3-
lastmod: 2023-12-16
3+
lastmod: 2023-12-19
44
title: IndexColumns Schema
55
---
66

@@ -26,4 +26,5 @@ Catalog | TABLE_CATALOG | 1
2626
Schema | TABLE_SCHEMA | 2
2727
Table | TABLE_NAME | 3
2828
Name | INDEX_NAME | 4
29+
Column | COLUMN_NAME | 5
2930

src/MySqlConnector/Core/SchemaProvider.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,5 +532,10 @@ FROM INFORMATION_SCHEMA.STATISTICS
532532
command.CommandText += " AND INDEX_NAME LIKE @index";
533533
command.Parameters.AddWithValue("@index", index);
534534
}
535+
if (restrictionValues is [_, _, _, _, { Length: > 0 } column, ..])
536+
{
537+
command.CommandText += " AND COLUMN_NAME LIKE @column";
538+
command.Parameters.AddWithValue("@column", column);
539+
}
535540
}, cancellationToken);
536541
}

src/MySqlConnector/Core/SchemaProvider.g.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ private Task FillMetaDataCollectionsAsync(IOBehavior ioBehavior, DataTable dataT
131131
dataTable.Rows.Add("Views", 0, 3);
132132
dataTable.Rows.Add("Foreign Keys", 4, 0);
133133
dataTable.Rows.Add("Indexes", 4, 0);
134-
dataTable.Rows.Add("IndexColumns", 4, 0);
134+
dataTable.Rows.Add("IndexColumns", 5, 0);
135135

136136
return Task.CompletedTask;
137137
}
@@ -649,6 +649,7 @@ private Task FillRestrictionsAsync(IOBehavior ioBehavior, DataTable dataTable, s
649649
dataTable.Rows.Add("IndexColumns", "Schema", "TABLE_SCHEMA", 2);
650650
dataTable.Rows.Add("IndexColumns", "Table", "TABLE_NAME", 3);
651651
dataTable.Rows.Add("IndexColumns", "Name", "INDEX_NAME", 4);
652+
dataTable.Rows.Add("IndexColumns", "Column", "COLUMN_NAME", 5);
652653

653654
return Task.CompletedTask;
654655
}
@@ -901,8 +902,8 @@ private async Task FillIndexesAsync(IOBehavior ioBehavior, DataTable dataTable,
901902

902903
private async Task FillIndexColumnsAsync(IOBehavior ioBehavior, DataTable dataTable, string tableName, string?[]? restrictionValues, CancellationToken cancellationToken)
903904
{
904-
if (restrictionValues is { Length: > 4 })
905-
throw new ArgumentException("More than 4 restrictionValues are not supported for schema 'IndexColumns'.", nameof(restrictionValues));
905+
if (restrictionValues is { Length: > 5 })
906+
throw new ArgumentException("More than 5 restrictionValues are not supported for schema 'IndexColumns'.", nameof(restrictionValues));
906907

907908
dataTable.TableName = tableName;
908909
dataTable.Columns.AddRange(

tests/IntegrationTests/SchemaProviderTests.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,5 +242,22 @@ public void IndexColumns()
242242
Assert.Equal(expected, actual);
243243
}
244244

245+
[Fact]
246+
public void IndexColumnsWithColumnName()
247+
{
248+
var schemaName = m_database.Connection.Database;
249+
var table = m_database.Connection.GetSchema("IndexColumns", new[] { null, schemaName, "pk_test", "pk_test_uq", "d" });
250+
var actual = table.Rows
251+
.Cast<DataRow>()
252+
.OrderBy(x => (string) x["INDEX_NAME"])
253+
.ThenBy(x => (int) x["ORDINAL_POSITION"])
254+
.Select(x => ((string) x["INDEX_SCHEMA"], (string) x["INDEX_NAME"], (string) x["TABLE_NAME"], (string) x["COLUMN_NAME"], (int) x["ORDINAL_POSITION"]));
255+
var expected = new[]
256+
{
257+
(schemaName, "pk_test_uq", "pk_test", "d", 2),
258+
};
259+
Assert.Equal(expected, actual);
260+
}
261+
245262
readonly DatabaseFixture m_database;
246263
}

tools/SchemaCollectionGenerator/SchemaCollections.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -840,6 +840,8 @@
840840
default: TABLE_NAME
841841
- name: Name
842842
default: INDEX_NAME
843+
- name: Column
844+
default: COLUMN_NAME
843845
columns:
844846
- name: INDEX_CATALOG
845847
type: string

0 commit comments

Comments
 (0)