Skip to content

Commit

Permalink
Add COLUMN_NAME as fifth restriction for IndexColumns schema.
Browse files Browse the repository at this point in the history
  • Loading branch information
bgrainger committed Dec 19, 2023
1 parent 65a73fc commit d3ad6d1
Show file tree
Hide file tree
Showing 5 changed files with 30 additions and 4 deletions.
3 changes: 2 additions & 1 deletion docs/content/overview/schema/indexcolumns.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
date: 2022-07-10
lastmod: 2023-12-16
lastmod: 2023-12-19
title: IndexColumns Schema
---

Expand All @@ -26,4 +26,5 @@ Catalog | TABLE_CATALOG | 1
Schema | TABLE_SCHEMA | 2
Table | TABLE_NAME | 3
Name | INDEX_NAME | 4
Column | COLUMN_NAME | 5

5 changes: 5 additions & 0 deletions src/MySqlConnector/Core/SchemaProvider.cs
Original file line number Diff line number Diff line change
Expand Up @@ -532,5 +532,10 @@ FROM INFORMATION_SCHEMA.STATISTICS
command.CommandText += " AND INDEX_NAME LIKE @index";
command.Parameters.AddWithValue("@index", index);
}
if (restrictionValues is [_, _, _, _, { Length: > 0 } column, ..])
{
command.CommandText += " AND COLUMN_NAME LIKE @column";
command.Parameters.AddWithValue("@column", column);
}
}, cancellationToken);
}
7 changes: 4 additions & 3 deletions src/MySqlConnector/Core/SchemaProvider.g.cs
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ private Task FillMetaDataCollectionsAsync(IOBehavior ioBehavior, DataTable dataT
dataTable.Rows.Add("Views", 0, 3);
dataTable.Rows.Add("Foreign Keys", 4, 0);
dataTable.Rows.Add("Indexes", 4, 0);
dataTable.Rows.Add("IndexColumns", 4, 0);
dataTable.Rows.Add("IndexColumns", 5, 0);

return Task.CompletedTask;
}
Expand Down Expand Up @@ -649,6 +649,7 @@ private Task FillRestrictionsAsync(IOBehavior ioBehavior, DataTable dataTable, s
dataTable.Rows.Add("IndexColumns", "Schema", "TABLE_SCHEMA", 2);
dataTable.Rows.Add("IndexColumns", "Table", "TABLE_NAME", 3);
dataTable.Rows.Add("IndexColumns", "Name", "INDEX_NAME", 4);
dataTable.Rows.Add("IndexColumns", "Column", "COLUMN_NAME", 5);

return Task.CompletedTask;
}
Expand Down Expand Up @@ -901,8 +902,8 @@ private async Task FillIndexesAsync(IOBehavior ioBehavior, DataTable dataTable,

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

dataTable.TableName = tableName;
dataTable.Columns.AddRange(
Expand Down
17 changes: 17 additions & 0 deletions tests/IntegrationTests/SchemaProviderTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -242,5 +242,22 @@ public void IndexColumns()
Assert.Equal(expected, actual);
}

[Fact]
public void IndexColumnsWithColumnName()
{
var schemaName = m_database.Connection.Database;
var table = m_database.Connection.GetSchema("IndexColumns", new[] { null, schemaName, "pk_test", "pk_test_uq", "d" });
var actual = table.Rows
.Cast<DataRow>()
.OrderBy(x => (string) x["INDEX_NAME"])
.ThenBy(x => (int) x["ORDINAL_POSITION"])
.Select(x => ((string) x["INDEX_SCHEMA"], (string) x["INDEX_NAME"], (string) x["TABLE_NAME"], (string) x["COLUMN_NAME"], (int) x["ORDINAL_POSITION"]));
var expected = new[]
{
(schemaName, "pk_test_uq", "pk_test", "d", 2),
};
Assert.Equal(expected, actual);
}

readonly DatabaseFixture m_database;
}
2 changes: 2 additions & 0 deletions tools/SchemaCollectionGenerator/SchemaCollections.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -840,6 +840,8 @@
default: TABLE_NAME
- name: Name
default: INDEX_NAME
- name: Column
default: COLUMN_NAME
columns:
- name: INDEX_CATALOG
type: string
Expand Down

0 comments on commit d3ad6d1

Please sign in to comment.