primary key columns validation rule (#1461)

This commit is contained in:
Alan Ren
2022-04-11 13:01:45 -07:00
committed by GitHub
parent 52f71e8b79
commit 612fb9eb36

View File

@@ -30,7 +30,8 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
new TemporalTableMustHavePrimaryKeyRule(),
new TableMustHaveAtLeastOneColumnRule(),
new MemoryOptimizedTableIdentityColumnRule(),
new TableShouldAvoidHavingMultipleEdgeConstraintsRule()
new TableShouldAvoidHavingMultipleEdgeConstraintsRule(),
new ColumnCannotBeListedMoreThanOnceInPrimaryKeyRule()
};
/// <summary>
@@ -523,4 +524,34 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
return errors;
}
}
public class ColumnCannotBeListedMoreThanOnceInPrimaryKeyRule : ITableDesignerValidationRule
{
public List<TableDesignerIssue> Run(Dac.TableDesigner designer)
{
var table = designer.TableViewModel;
var errors = new List<TableDesignerIssue>();
if (table.PrimaryKey != null)
{
var existingNames = new HashSet<string>();
for (int i = 0; i < table.PrimaryKey.Columns.Count; i++)
{
var columnSpec = table.PrimaryKey.Columns[i];
if (existingNames.Contains(columnSpec.Column))
{
errors.Add(new TableDesignerIssue()
{
Description = string.Format("Cannot use duplicate column names in primary key, column name: {0}", columnSpec.Column),
PropertyPath = new object[] { TablePropertyNames.PrimaryKeyColumns, i, IndexColumnSpecificationPropertyNames.Column }
});
}
else
{
existingNames.Add(columnSpec.Column);
}
}
}
return errors;
}
}
}