Skip to content

Commit c9f2b3e

Browse files
committed
Merge branch 'dev/anushakolan/mcp/add-field-description' of https://github.com/Azure/data-api-builder into dev/anushakolan/mcp/add-field-description
2 parents 4206af6 + a71700d commit c9f2b3e

File tree

2 files changed

+56
-15
lines changed

2 files changed

+56
-15
lines changed

src/Core/Services/MetadataProviders/SqlMetadataProvider.cs

Lines changed: 55 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1094,22 +1094,72 @@ await PopulateResultSetDefinitionsForStoredProcedureAsync(
10941094
}
10951095
else if (entitySourceType is EntitySourceType.Table)
10961096
{
1097+
// Resolve PKs from fields first
1098+
List<string>? pkFields = entity.Fields?
1099+
.Where(f => f.PrimaryKey)
1100+
.Select(f => f.Name)
1101+
.ToList();
1102+
1103+
// Fallback to key-fields from config
1104+
if (pkFields == null || pkFields.Count == 0)
1105+
{
1106+
pkFields = entity.Source.KeyFields?.ToList();
1107+
}
1108+
1109+
// If still empty, fallback to DB schema PKs
1110+
if (pkFields == null || pkFields.Count == 0)
1111+
{
1112+
DataTable dataTable = await GetTableWithSchemaFromDataSetAsync(
1113+
entityName,
1114+
GetSchemaName(entityName),
1115+
GetDatabaseObjectName(entityName));
1116+
1117+
pkFields = dataTable.PrimaryKey.Select(pk => pk.ColumnName).ToList();
1118+
}
1119+
1120+
pkFields ??= new List<string>();
1121+
10971122
await PopulateSourceDefinitionAsync(
10981123
entityName,
10991124
GetSchemaName(entityName),
11001125
GetDatabaseObjectName(entityName),
11011126
GetSourceDefinition(entityName),
1102-
entity.Source.KeyFields);
1127+
pkFields);
11031128
}
11041129
else
11051130
{
1131+
// Resolve PKs from fields first
1132+
List<string>? pkFields = entity.Fields?
1133+
.Where(f => f.PrimaryKey)
1134+
.Select(f => f.Name)
1135+
.ToList();
1136+
1137+
// Fallback to key-fields from config
1138+
if (pkFields == null || pkFields.Count == 0)
1139+
{
1140+
pkFields = entity.Source.KeyFields?.ToList();
1141+
}
1142+
1143+
// If still empty, fallback to DB schema PKs
1144+
if (pkFields == null || pkFields.Count == 0)
1145+
{
1146+
DataTable dataTable = await GetTableWithSchemaFromDataSetAsync(
1147+
entityName,
1148+
GetSchemaName(entityName),
1149+
GetDatabaseObjectName(entityName));
1150+
1151+
pkFields = dataTable.PrimaryKey.Select(pk => pk.ColumnName).ToList();
1152+
}
1153+
1154+
pkFields ??= [];
1155+
11061156
ViewDefinition viewDefinition = (ViewDefinition)GetSourceDefinition(entityName);
11071157
await PopulateSourceDefinitionAsync(
11081158
entityName,
11091159
GetSchemaName(entityName),
11101160
GetDatabaseObjectName(entityName),
11111161
viewDefinition,
1112-
entity.Source.KeyFields);
1162+
pkFields);
11131163
}
11141164
}
11151165
catch (Exception e)
@@ -1264,19 +1314,9 @@ private async Task PopulateSourceDefinitionAsync(
12641314
string schemaName,
12651315
string tableName,
12661316
SourceDefinition sourceDefinition,
1267-
string[]? runtimeConfigKeyFields)
1317+
List<string> pkFields)
12681318
{
1269-
DataTable dataTable = await GetTableWithSchemaFromDataSetAsync(entityName, schemaName, tableName);
1270-
1271-
List<DataColumn> primaryKeys = new(dataTable.PrimaryKey);
1272-
if (runtimeConfigKeyFields is null || runtimeConfigKeyFields.Length == 0)
1273-
{
1274-
sourceDefinition.PrimaryKey = new(primaryKeys.Select(primaryKey => primaryKey.ColumnName));
1275-
}
1276-
else
1277-
{
1278-
sourceDefinition.PrimaryKey = new(runtimeConfigKeyFields);
1279-
}
1319+
sourceDefinition.PrimaryKey = [.. pkFields];
12801320

12811321
if (sourceDefinition.PrimaryKey.Count == 0)
12821322
{
@@ -1292,6 +1332,7 @@ private async Task PopulateSourceDefinitionAsync(
12921332
await PopulateTriggerMetadataForTable(entityName, schemaName, tableName, sourceDefinition);
12931333
}
12941334

1335+
DataTable dataTable = await GetTableWithSchemaFromDataSetAsync(entityName, schemaName, tableName);
12951336
using DataTableReader reader = new(dataTable);
12961337
DataTable schemaTable = reader.GetSchemaTable();
12971338
RuntimeConfig runtimeConfig = _runtimeConfigProvider.GetConfig();

src/Service.Tests/TestHelper.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public static RuntimeConfig AddMissingEntitiesToConfig(RuntimeConfig config, str
8080
{
8181
Entity entity = new(
8282
Source: new(entityName, EntitySourceType.Table, null, keyfields),
83-
Fields: null,
83+
Fields: new List<FieldMetadata> { new() { Name = keyfields?[0], PrimaryKey = true } },
8484
GraphQL: new(entityKey, entityKey.Pluralize()),
8585
Rest: new(Enabled: true),
8686
Permissions: new[]

0 commit comments

Comments
 (0)