mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-02-16 18:47:57 -05:00
fix a couple table designer issues (#1457)
This commit is contained in:
@@ -98,6 +98,7 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
|
|||||||
return this.HandleRequest<ProcessTableDesignerEditResponse>(requestContext, async () =>
|
return this.HandleRequest<ProcessTableDesignerEditResponse>(requestContext, async () =>
|
||||||
{
|
{
|
||||||
var refreshViewRequired = false;
|
var refreshViewRequired = false;
|
||||||
|
string inputValidationError = null;
|
||||||
DesignerPathUtils.Validate(requestParams.TableChangeInfo.Path, requestParams.TableChangeInfo.Type);
|
DesignerPathUtils.Validate(requestParams.TableChangeInfo.Path, requestParams.TableChangeInfo.Type);
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -115,29 +116,23 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
await SendProcessTableEditResponse(requestParams.TableInfo, requestContext, refreshViewRequired);
|
|
||||||
}
|
}
|
||||||
catch (DesignerValidationException e)
|
catch (DesignerValidationException e)
|
||||||
{
|
{
|
||||||
await SendProcessTableEditResponse(requestParams.TableInfo, requestContext, refreshViewRequired, e.Message);
|
inputValidationError = e.Message;
|
||||||
}
|
}
|
||||||
});
|
var designer = this.GetTableDesigner(requestParams.TableInfo);
|
||||||
}
|
|
||||||
|
|
||||||
private async Task SendProcessTableEditResponse(TableInfo tableInfo, RequestContext<ProcessTableDesignerEditResponse> requestContext,
|
|
||||||
bool refreshViewRequired, string inputValidationError = null)
|
|
||||||
{
|
|
||||||
var designer = this.GetTableDesigner(tableInfo);
|
|
||||||
var issues = TableDesignerValidator.Validate(designer);
|
var issues = TableDesignerValidator.Validate(designer);
|
||||||
await requestContext.SendResult(new ProcessTableDesignerEditResponse()
|
await requestContext.SendResult(new ProcessTableDesignerEditResponse()
|
||||||
{
|
{
|
||||||
ViewModel = this.GetTableViewModel(tableInfo),
|
ViewModel = this.GetTableViewModel(requestParams.TableInfo),
|
||||||
IsValid = issues.Where(i => i.Severity == IssueSeverity.Error).Count() == 0,
|
IsValid = issues.Where(i => i.Severity == IssueSeverity.Error).Count() == 0,
|
||||||
Issues = issues.ToArray(),
|
Issues = issues.ToArray(),
|
||||||
View = refreshViewRequired ? this.GetDesignerViewInfo(tableInfo) : null,
|
View = refreshViewRequired ? this.GetDesignerViewInfo(requestParams.TableInfo) : null,
|
||||||
Metadata = this.GetMetadata(tableInfo),
|
Metadata = this.GetMetadata(requestParams.TableInfo),
|
||||||
InputValidationError = inputValidationError
|
InputValidationError = inputValidationError
|
||||||
});
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private Task HandlePublishTableChangesRequest(TableInfo tableInfo, RequestContext<PublishTableChangesResponse> requestContext)
|
private Task HandlePublishTableChangesRequest(TableInfo tableInfo, RequestContext<PublishTableChangesResponse> requestContext)
|
||||||
@@ -183,29 +178,23 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
|
|||||||
{
|
{
|
||||||
return this.HandleRequest<GeneratePreviewReportResult>(requestContext, async () =>
|
return this.HandleRequest<GeneratePreviewReportResult>(requestContext, async () =>
|
||||||
{
|
{
|
||||||
|
var generatePreviewReportResult = new GeneratePreviewReportResult();
|
||||||
try
|
try
|
||||||
{
|
|
||||||
await SendGeneratePreviewReportResult(tableInfo, requestContext);
|
|
||||||
}
|
|
||||||
catch (DesignerValidationException e)
|
|
||||||
{
|
|
||||||
await SendGeneratePreviewReportResult(tableInfo, requestContext, e.Message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private async Task SendGeneratePreviewReportResult(TableInfo tableInfo, RequestContext<GeneratePreviewReportResult> requestContext,
|
|
||||||
string schemaValidationError = null)
|
|
||||||
{
|
{
|
||||||
var table = this.GetTableDesigner(tableInfo);
|
var table = this.GetTableDesigner(tableInfo);
|
||||||
var report = table.GenerateReport();
|
var report = table.GenerateReport();
|
||||||
var generatePreviewReportResult = new GeneratePreviewReportResult();
|
|
||||||
generatePreviewReportResult.Report = report;
|
generatePreviewReportResult.Report = report;
|
||||||
generatePreviewReportResult.MimeType = "text/markdown";
|
generatePreviewReportResult.MimeType = "text/markdown";
|
||||||
generatePreviewReportResult.Metadata = this.GetMetadata(tableInfo);
|
generatePreviewReportResult.Metadata = this.GetMetadata(tableInfo);
|
||||||
generatePreviewReportResult.SchemaValidationError = schemaValidationError;
|
|
||||||
await requestContext.SendResult(generatePreviewReportResult);
|
await requestContext.SendResult(generatePreviewReportResult);
|
||||||
}
|
}
|
||||||
|
catch (DesignerValidationException e)
|
||||||
|
{
|
||||||
|
generatePreviewReportResult.SchemaValidationError = e.Message;
|
||||||
|
await requestContext.SendResult(generatePreviewReportResult);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private Task HandleDisposeTableDesignerRequest(TableInfo tableInfo, RequestContext<DisposeTableDesignerResponse> requestContext)
|
private Task HandleDisposeTableDesignerRequest(TableInfo tableInfo, RequestContext<DisposeTableDesignerResponse> requestContext)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -182,25 +182,17 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
|
|||||||
{
|
{
|
||||||
var errors = new List<TableDesignerIssue>();
|
var errors = new List<TableDesignerIssue>();
|
||||||
var table = designer.TableViewModel;
|
var table = designer.TableViewModel;
|
||||||
var existingNames = new HashSet<string>();
|
|
||||||
Dictionary<string, int> currentSchemaConstraints = designer.AllConstraintsNamesCounts;
|
Dictionary<string, int> currentSchemaConstraints = designer.AllConstraintsNamesCounts;
|
||||||
for (int i = 0; i < table.ForeignKeys.Items.Count; i++)
|
for (int i = 0; i < table.ForeignKeys.Items.Count; i++)
|
||||||
{
|
{
|
||||||
var foreignKey = table.ForeignKeys.Items[i];
|
var foreignKey = table.ForeignKeys.Items[i];
|
||||||
if (currentSchemaConstraints.ContainsKey(foreignKey.Name) && currentSchemaConstraints[foreignKey.Name] > 1)
|
if (currentSchemaConstraints.ContainsKey(foreignKey.Name) && currentSchemaConstraints[foreignKey.Name] > 1)
|
||||||
{
|
|
||||||
if (existingNames.Contains(foreignKey.Name))
|
|
||||||
{
|
{
|
||||||
errors.Add(new TableDesignerIssue()
|
errors.Add(new TableDesignerIssue()
|
||||||
{
|
{
|
||||||
Description = string.Format("The name '{0}' is already used by another constraint. Row number: {1}.", foreignKey.Name, i + 1),
|
Description = string.Format("The name '{0}' is already used by another constraint. Row number: {1}.", foreignKey.Name, i + 1),
|
||||||
PropertyPath = new object[] { TablePropertyNames.ForeignKeys, i, ForeignKeyPropertyNames.Name }
|
PropertyPath = new object[] { TablePropertyNames.ForeignKeys, i, ForeignKeyPropertyNames.Name }
|
||||||
});
|
});
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
existingNames.Add(foreignKey.Name);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -209,8 +201,6 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
|
|||||||
{
|
{
|
||||||
var checkConstraint = table.CheckConstraints.Items[i];
|
var checkConstraint = table.CheckConstraints.Items[i];
|
||||||
if (currentSchemaConstraints.ContainsKey(checkConstraint.Name) && currentSchemaConstraints[checkConstraint.Name] > 1)
|
if (currentSchemaConstraints.ContainsKey(checkConstraint.Name) && currentSchemaConstraints[checkConstraint.Name] > 1)
|
||||||
{
|
|
||||||
if (existingNames.Contains(checkConstraint.Name))
|
|
||||||
{
|
{
|
||||||
errors.Add(new TableDesignerIssue()
|
errors.Add(new TableDesignerIssue()
|
||||||
{
|
{
|
||||||
@@ -218,19 +208,12 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
|
|||||||
PropertyPath = new object[] { TablePropertyNames.CheckConstraints, i, CheckConstraintPropertyNames.Name }
|
PropertyPath = new object[] { TablePropertyNames.CheckConstraints, i, CheckConstraintPropertyNames.Name }
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
existingNames.Add(checkConstraint.Name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < table.EdgeConstraints.Items.Count; i++)
|
for (int i = 0; i < table.EdgeConstraints.Items.Count; i++)
|
||||||
{
|
{
|
||||||
var edgeConstraint = table.EdgeConstraints.Items[i];
|
var edgeConstraint = table.EdgeConstraints.Items[i];
|
||||||
if (currentSchemaConstraints.ContainsKey(edgeConstraint.Name) && currentSchemaConstraints[edgeConstraint.Name] > 1)
|
if (currentSchemaConstraints.ContainsKey(edgeConstraint.Name) && currentSchemaConstraints[edgeConstraint.Name] > 1)
|
||||||
{
|
|
||||||
if (existingNames.Contains(edgeConstraint.Name))
|
|
||||||
{
|
{
|
||||||
errors.Add(new TableDesignerIssue()
|
errors.Add(new TableDesignerIssue()
|
||||||
{
|
{
|
||||||
@@ -238,12 +221,6 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner
|
|||||||
PropertyPath = new object[] { TablePropertyNames.EdgeConstraints, i, EdgeConstraintPropertyNames.Name }
|
PropertyPath = new object[] { TablePropertyNames.EdgeConstraints, i, EdgeConstraintPropertyNames.Name }
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
existingNames.Add(edgeConstraint.Name);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return errors;
|
return errors;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user