From 06a4b0d1a227a967a1d6e7b10fd642e5d523e071 Mon Sep 17 00:00:00 2001 From: Vladimir Chernov Date: Wed, 4 Nov 2020 22:22:56 +0300 Subject: [PATCH] =?UTF-8?q?fix=20for=20history=20reload=20upon=20target=20?= =?UTF-8?q?change=20and=20filter=20out=20unsupported=20=E2=80=A6=20(#13205?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix for history reload upon target change and filter out unsupported asmt messages --- .../src/assessmentResultGrid.ts | 36 +++++++++++++------ extensions/sql-assessment/src/engine.ts | 5 +-- .../sql-assessment/src/maincontroller.ts | 1 - 3 files changed, 28 insertions(+), 14 deletions(-) diff --git a/extensions/sql-assessment/src/assessmentResultGrid.ts b/extensions/sql-assessment/src/assessmentResultGrid.ts index f3e713f36f..b3a4a6eac2 100644 --- a/extensions/sql-assessment/src/assessmentResultGrid.ts +++ b/extensions/sql-assessment/src/assessmentResultGrid.ts @@ -121,9 +121,9 @@ export class AssessmentResultGrid implements vscode.Disposable { public async displayResult(asmtResult: azdata.SqlAssessmentResult, method: AssessmentType) { this.asmtType = method; - this.dataItems = asmtResult.items; + this.dataItems = this.filterOutNotSupportedKind(asmtResult.items); await this.table.updateProperties({ - 'data': asmtResult.items.map(item => this.convertToDataView(item)) + 'data': this.dataItems.map(item => this.convertToDataView(item)) }); this.rootContainer.setLayout({ flexFlow: 'column', @@ -145,20 +145,34 @@ export class AssessmentResultGrid implements vscode.Disposable { }); } - public async appendResult(asmtResult: azdata.SqlAssessmentResult): Promise { - if (this.dataItems) { - this.dataItems.push(...asmtResult.items); + // we need to filter out warnings and error results since we don't have an appropriate way of displaying such messages. + // have to redone this once required functionality will be added to the core. + private filterOutNotSupportedKind(items: azdata.SqlAssessmentResultItem[]): azdata.SqlAssessmentResultItem[] { + if (this.asmtType === AssessmentType.AvailableRules) { + return items; } - this.table.appendData(asmtResult.items.map(item => this.convertToDataView(item))); + + return items.filter(i => i.kind === azdata.sqlAssessment.SqlAssessmentResultItemKind.RealResult); + } + + public async appendResult(asmtResult: azdata.SqlAssessmentResult): Promise { + let filteredValues = this.filterOutNotSupportedKind(asmtResult.items); + if (this.dataItems) { + this.dataItems.push(...filteredValues); + } + this.table.appendData(filteredValues.map(item => this.convertToDataView(item))); } private async showDetails(rowNumber: number) { const selectedRowValues = this.table.data[rowNumber]; - const asmtResultItem = this.dataItems.find(item => - item.targetName === selectedRowValues[this.targetColOrder] - && item.checkId === selectedRowValues[this.checkIdColOrder] - && item.message === selectedRowValues[this.messageColOrder] - ); + const asmtResultItem = this.asmtType === AssessmentType.InvokeAssessment + ? this.dataItems.find(item => + item.targetName === selectedRowValues[this.targetColOrder] + && item.checkId === selectedRowValues[this.checkIdColOrder] + && item.message === selectedRowValues[this.messageColOrder]) + : this.dataItems.find(item => + item.targetName === selectedRowValues[this.targetColOrder] + && item.checkId === selectedRowValues[this.checkIdColOrder]); if (!asmtResultItem) { return; diff --git a/extensions/sql-assessment/src/engine.ts b/extensions/sql-assessment/src/engine.ts index 4b9ac4aab9..e3bf60b2a8 100644 --- a/extensions/sql-assessment/src/engine.ts +++ b/extensions/sql-assessment/src/engine.ts @@ -32,7 +32,7 @@ export class AssessmentEngine { private connectionUri: string = ''; private connectionProfile!: azdata.connection.ConnectionProfile; private lastInvokedResults!: SqlAssessmentResultInfo; - private historicalRecords!: SqlAssessmentRecord[]; + private historicalRecords!: SqlAssessmentRecord[] | undefined; constructor(service: mssql.ISqlAssessmentService) { @@ -56,6 +56,7 @@ export class AssessmentEngine { public async initialize(connectionId: string) { this.connectionUri = await azdata.connection.getUriForConnection(connectionId); this.connectionProfile = await azdata.connection.getCurrentConnection(); + this.historicalRecords = undefined; } public async performAssessment(asmtType: AssessmentType, onResult: OnResultCallback): Promise { @@ -99,7 +100,7 @@ export class AssessmentEngine { await this.loadHistory(); } - return this.historicalRecords; + return this.historicalRecords ?? []; } private async loadHistory(): Promise { diff --git a/extensions/sql-assessment/src/maincontroller.ts b/extensions/sql-assessment/src/maincontroller.ts index fb42836897..6d6f5cd155 100644 --- a/extensions/sql-assessment/src/maincontroller.ts +++ b/extensions/sql-assessment/src/maincontroller.ts @@ -31,7 +31,6 @@ export default class MainController { } public async activate(): Promise { - this.sqlAssessment = ((await vscode.extensions.getExtension(mssql.extension.name)?.activate() as mssql.IExtension)).sqlAssessment; this.engine = new AssessmentEngine(this.sqlAssessment); this.registerModelViewProvider();