diff --git a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/TableDesignerService.cs b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/TableDesignerService.cs index 5515ec17..3773bf5e 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/TableDesignerService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/TableDesignerService.cs @@ -98,6 +98,7 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner return this.HandleRequest(requestContext, async () => { var refreshViewRequired = false; + string inputValidationError = null; DesignerPathUtils.Validate(requestParams.TableChangeInfo.Path, requestParams.TableChangeInfo.Type); try { @@ -115,28 +116,22 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner default: break; } - await SendProcessTableEditResponse(requestParams.TableInfo, requestContext, refreshViewRequired); } catch (DesignerValidationException e) { - await SendProcessTableEditResponse(requestParams.TableInfo, requestContext, refreshViewRequired, e.Message); + inputValidationError = e.Message; } - }); - } - - private async Task SendProcessTableEditResponse(TableInfo tableInfo, RequestContext requestContext, - bool refreshViewRequired, string inputValidationError = null) - { - var designer = this.GetTableDesigner(tableInfo); - var issues = TableDesignerValidator.Validate(designer); - await requestContext.SendResult(new ProcessTableDesignerEditResponse() - { - ViewModel = this.GetTableViewModel(tableInfo), - IsValid = issues.Where(i => i.Severity == IssueSeverity.Error).Count() == 0, - Issues = issues.ToArray(), - View = refreshViewRequired ? this.GetDesignerViewInfo(tableInfo) : null, - Metadata = this.GetMetadata(tableInfo), - InputValidationError = inputValidationError + var designer = this.GetTableDesigner(requestParams.TableInfo); + var issues = TableDesignerValidator.Validate(designer); + await requestContext.SendResult(new ProcessTableDesignerEditResponse() + { + ViewModel = this.GetTableViewModel(requestParams.TableInfo), + IsValid = issues.Where(i => i.Severity == IssueSeverity.Error).Count() == 0, + Issues = issues.ToArray(), + View = refreshViewRequired ? this.GetDesignerViewInfo(requestParams.TableInfo) : null, + Metadata = this.GetMetadata(requestParams.TableInfo), + InputValidationError = inputValidationError + }); }); } @@ -183,30 +178,24 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner { return this.HandleRequest(requestContext, async () => { + var generatePreviewReportResult = new GeneratePreviewReportResult(); try { - await SendGeneratePreviewReportResult(tableInfo, requestContext); + var table = this.GetTableDesigner(tableInfo); + var report = table.GenerateReport(); + generatePreviewReportResult.Report = report; + generatePreviewReportResult.MimeType = "text/markdown"; + generatePreviewReportResult.Metadata = this.GetMetadata(tableInfo); + await requestContext.SendResult(generatePreviewReportResult); } catch (DesignerValidationException e) { - await SendGeneratePreviewReportResult(tableInfo, requestContext, e.Message); + generatePreviewReportResult.SchemaValidationError = e.Message; + await requestContext.SendResult(generatePreviewReportResult); } }); } - private async Task SendGeneratePreviewReportResult(TableInfo tableInfo, RequestContext requestContext, - string schemaValidationError = null) - { - var table = this.GetTableDesigner(tableInfo); - var report = table.GenerateReport(); - var generatePreviewReportResult = new GeneratePreviewReportResult(); - generatePreviewReportResult.Report = report; - generatePreviewReportResult.MimeType = "text/markdown"; - generatePreviewReportResult.Metadata = this.GetMetadata(tableInfo); - generatePreviewReportResult.SchemaValidationError = schemaValidationError; - await requestContext.SendResult(generatePreviewReportResult); - } - private Task HandleDisposeTableDesignerRequest(TableInfo tableInfo, RequestContext requestContext) { return this.HandleRequest(requestContext, async () => diff --git a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/TableDesignerValidator.cs b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/TableDesignerValidator.cs index 172f9d9f..c46a827e 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/TableDesignerValidator.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/TableDesigner/TableDesignerValidator.cs @@ -182,25 +182,17 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner { var errors = new List(); var table = designer.TableViewModel; - var existingNames = new HashSet(); Dictionary currentSchemaConstraints = designer.AllConstraintsNamesCounts; for (int i = 0; i < table.ForeignKeys.Items.Count; i++) { var foreignKey = table.ForeignKeys.Items[i]; 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), - PropertyPath = new object[] { TablePropertyNames.ForeignKeys, i, ForeignKeyPropertyNames.Name } - }); - } - else - { - existingNames.Add(foreignKey.Name); - } + 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 } + }); } } @@ -210,18 +202,11 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner var checkConstraint = table.CheckConstraints.Items[i]; if (currentSchemaConstraints.ContainsKey(checkConstraint.Name) && currentSchemaConstraints[checkConstraint.Name] > 1) { - if (existingNames.Contains(checkConstraint.Name)) + errors.Add(new TableDesignerIssue() { - errors.Add(new TableDesignerIssue() - { - Description = string.Format("The name '{0}' is already used by another constraint. Row number: {1}.", checkConstraint.Name, i + 1), - PropertyPath = new object[] { TablePropertyNames.CheckConstraints, i, CheckConstraintPropertyNames.Name } - }); - } - else - { - existingNames.Add(checkConstraint.Name); - } + Description = string.Format("The name '{0}' is already used by another constraint. Row number: {1}.", checkConstraint.Name, i + 1), + PropertyPath = new object[] { TablePropertyNames.CheckConstraints, i, CheckConstraintPropertyNames.Name } + }); } } @@ -230,19 +215,11 @@ namespace Microsoft.SqlTools.ServiceLayer.TableDesigner var edgeConstraint = table.EdgeConstraints.Items[i]; if (currentSchemaConstraints.ContainsKey(edgeConstraint.Name) && currentSchemaConstraints[edgeConstraint.Name] > 1) { - if (existingNames.Contains(edgeConstraint.Name)) + errors.Add(new TableDesignerIssue() { - errors.Add(new TableDesignerIssue() - { - Description = string.Format("The name '{0}' is already used by another constraint. Row number: {1}.", edgeConstraint.Name, i + 1), - PropertyPath = new object[] { TablePropertyNames.EdgeConstraints, i, EdgeConstraintPropertyNames.Name } - }); - } - else - { - existingNames.Add(edgeConstraint.Name); - } - + Description = string.Format("The name '{0}' is already used by another constraint. Row number: {1}.", edgeConstraint.Name, i + 1), + PropertyPath = new object[] { TablePropertyNames.EdgeConstraints, i, EdgeConstraintPropertyNames.Name } + }); } } return errors;