From 0693080630bbabebb9003aea5dfc41c6d3340e31 Mon Sep 17 00:00:00 2001 From: Anthony Dresser Date: Thu, 4 Oct 2018 11:48:41 -0700 Subject: [PATCH] change how query plan is handled (#2735) --- src/sql/parts/query/editor/gridPanel.ts | 6 ------ src/sql/parts/query/editor/queryResultsView.ts | 5 +++++ src/sql/parts/query/execution/queryRunner.ts | 6 ++++++ 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/sql/parts/query/editor/gridPanel.ts b/src/sql/parts/query/editor/gridPanel.ts index f083fccc6b..12bd059aa5 100644 --- a/src/sql/parts/query/editor/gridPanel.ts +++ b/src/sql/parts/query/editor/gridPanel.ts @@ -552,12 +552,6 @@ class GridTable extends Disposable implements IView { private loadData(offset: number, count: number): Thenable { return this.runner.getQueryRows(offset, count, this.resultSet.batchId, this.resultSet.id).then(response => { - if (this.runner.isQueryPlan) { - // it's a show plan response - if (response.resultSubset.rowCount === 1) { - this.instantiationService.createInstance(ShowQueryPlanAction).run(response.resultSubset.rows[0][0].displayValue); - } - } return response.resultSubset.rows.map(r => { let dataWithSchema = {}; // skip the first column since its a number column diff --git a/src/sql/parts/query/editor/queryResultsView.ts b/src/sql/parts/query/editor/queryResultsView.ts index 942846cd20..67eb615482 100644 --- a/src/sql/parts/query/editor/queryResultsView.ts +++ b/src/sql/parts/query/editor/queryResultsView.ts @@ -203,6 +203,11 @@ export class QueryResultsView { if (!this._panelView.contains(this.qpTab)) { this._panelView.pushTab(this.qpTab); } + } else if (queryRunner.isQueryPlan) { + let disp = queryRunner.onResultSet(() => { + this.showPlan(queryRunner.planXml); + disp.dispose(); + }); } if (this.input.state.activeTab) { this._panelView.showTab(this.input.state.activeTab); diff --git a/src/sql/parts/query/execution/queryRunner.ts b/src/sql/parts/query/execution/queryRunner.ts index 2c6fc45c8e..ba1530b5a2 100644 --- a/src/sql/parts/query/execution/queryRunner.ts +++ b/src/sql/parts/query/execution/queryRunner.ts @@ -72,6 +72,8 @@ export default class QueryRunner { private _isQueryPlan: boolean; public get isQueryPlan(): boolean { return this._isQueryPlan; } + private _planXml: string; + public get planXml(): string { return this._planXml; } private _onMessage = new Emitter(); private _debouncedMessage = debounceEvent(this._onMessage.event, (l, e) => { @@ -338,6 +340,10 @@ export default class QueryRunner { } else { batchSet = this.batchSets[resultSet.batchId]; } + // handle getting queryPlanxml if we need too + if (this.isQueryPlan) { + this.getQueryRows(0, 1, 0, 0).then(e => this._planXml = e.resultSubset.rows[0][0].displayValue); + } if (batchSet) { // Store the result set in the batch and emit that a result set has completed batchSet.resultSetSummaries[resultSet.id] = resultSet;