From 18fb78b3ec0db9b6dde4135f0b526cb74354ae86 Mon Sep 17 00:00:00 2001 From: Anthony Dresser Date: Wed, 12 Dec 2018 12:03:59 -0800 Subject: [PATCH] Account for different situations for stream setting (#3615) * add cases for different situation * default streaming setting false --- .../parts/query/common/query.contribution.ts | 2 +- src/sql/parts/query/editor/gridPanel.ts | 89 +++++++++++-------- src/sql/parts/query/execution/queryRunner.ts | 12 +-- 3 files changed, 58 insertions(+), 45 deletions(-) diff --git a/src/sql/parts/query/common/query.contribution.ts b/src/sql/parts/query/common/query.contribution.ts index 5792d01e00..6eea5b35e6 100644 --- a/src/sql/parts/query/common/query.contribution.ts +++ b/src/sql/parts/query/common/query.contribution.ts @@ -308,7 +308,7 @@ let registryProperties = { 'sql.results.streaming': { 'type': 'boolean', 'description': localize('sql.results.streaming', 'Enable results streaming; contains few minor visual issues'), - 'default': true + 'default': false }, 'sql.copyIncludeHeaders': { 'type': 'boolean', diff --git a/src/sql/parts/query/editor/gridPanel.ts b/src/sql/parts/query/editor/gridPanel.ts index 0e0555b969..56841f1cca 100644 --- a/src/sql/parts/query/editor/gridPanel.ts +++ b/src/sql/parts/query/editor/gridPanel.ts @@ -185,12 +185,31 @@ export class GridPanel extends ViewletPanel { } this.reset(); })); + this.addResultSet(this.runner.batchSets.reduce((p, e) => { + if (this.configurationService.getValue('sql.results.streaming')) { + p = p.concat(e.resultSetSummaries); + } else { + p = p.concat(e.resultSetSummaries.filter(c => c.complete)); + } + return p; + }, [])); + this.maximumBodySize = this.tables.reduce((p, c) => { + return p + c.maximumSize; + }, 0); + + if (this.state && this.state.scrollPosition) { + this.splitView.setScrollPosition(this.state.scrollPosition); + } } private onResultSet(resultSet: sqlops.ResultSetSummary | sqlops.ResultSetSummary[]) { - if (this.configurationService.getValue('sql.results.streaming')) { - this.addResultSet(resultSet); - + let resultsToAdd: sqlops.ResultSetSummary[]; + if (!Array.isArray(resultSet)) { + resultsToAdd = [resultSet]; + } else { + resultsToAdd = resultSet.splice(0); + } + const sizeChanges = () => { this.tables.map(t => { t.state.canBeMaximized = this.tables.length > 1; }); @@ -202,6 +221,17 @@ export class GridPanel extends ViewletPanel { if (this.state && this.state.scrollPosition) { this.splitView.setScrollPosition(this.state.scrollPosition); } + }; + + if (this.configurationService.getValue('sql.results.streaming')) { + this.addResultSet(resultsToAdd); + sizeChanges(); + } else { + resultsToAdd = resultsToAdd.filter(e => e.complete); + if (resultsToAdd.length > 0) { + this.addResultSet(resultsToAdd); + } + sizeChanges(); } } @@ -210,9 +240,19 @@ export class GridPanel extends ViewletPanel { if (!Array.isArray(resultSet)) { resultsToUpdate = [resultSet]; } else { - resultsToUpdate = resultSet; + resultsToUpdate = resultSet.splice(0); } + const sizeChanges = () => { + this.maximumBodySize = this.tables.reduce((p, c) => { + return p + c.maximumSize; + }, 0); + + if (this.state && this.state.scrollPosition) { + this.splitView.setScrollPosition(this.state.scrollPosition); + } + }; + if (this.configurationService.getValue('sql.results.streaming')) { for (let set of resultsToUpdate) { let table = this.tables.find(t => t.resultSet.batchId === set.batchId && t.resultSet.id === set.id); @@ -222,47 +262,20 @@ export class GridPanel extends ViewletPanel { warn('Got result set update request for non-existant table'); } } - - this.maximumBodySize = this.tables.reduce((p, c) => { - return p + c.maximumSize; - }, 0); - - if (this.state && this.state.scrollPosition) { - this.splitView.setScrollPosition(this.state.scrollPosition); - } + sizeChanges(); } else { - let change = false; - - for (let set of resultsToUpdate) { - if (set.complete) { - this.addResultSet(set); - change = true; - } - } - - if (change) { - this.maximumBodySize = this.tables.reduce((p, c) => { - return p + c.maximumSize; - }, 0); - - if (this.state && this.state.scrollPosition) { - this.splitView.setScrollPosition(this.state.scrollPosition); - } + resultsToUpdate = resultsToUpdate.filter(e => e.complete); + if (resultsToUpdate.length > 0) { + this.addResultSet(resultsToUpdate); } + sizeChanges(); } } - private addResultSet(resultSet: sqlops.ResultSetSummary | sqlops.ResultSetSummary[]) { - let resultsToAdd: sqlops.ResultSetSummary[]; - if (!Array.isArray(resultSet)) { - resultsToAdd = [resultSet]; - } else { - resultsToAdd = resultSet; - } - + private addResultSet(resultSet: sqlops.ResultSetSummary[]) { let tables: GridTable[] = []; - for (let set of resultsToAdd) { + for (let set of resultSet) { let tableState: GridTableState; if (this._state) { tableState = this.state.tableStates.find(e => e.batchId === set.batchId && e.resultId === set.id); diff --git a/src/sql/parts/query/execution/queryRunner.ts b/src/sql/parts/query/execution/queryRunner.ts index 5fffc72b4b..8dd792116d 100644 --- a/src/sql/parts/query/execution/queryRunner.ts +++ b/src/sql/parts/query/execution/queryRunner.ts @@ -97,8 +97,8 @@ export default class QueryRunner extends Disposable { return l.concat(e); } }); - private _echoedResultSet = echo(this._debouncedResultSet.event); - public readonly onResultSet = this._echoedResultSet.event; + // private _echoedResultSet = echo(this._debouncedResultSet.event); + public readonly onResultSet = this._debouncedResultSet.event; private _onResultSetUpdate = this._register(new Emitter()); private _debouncedResultSetUpdate = debounceEvent(this._onResultSetUpdate.event, (l, e) => { @@ -109,8 +109,8 @@ export default class QueryRunner extends Disposable { return l.concat(e); } }); - private _echoedResultSetUpdate = echo(this._debouncedResultSetUpdate.event); - public readonly onResultSetUpdate = this._echoedResultSetUpdate.event; + // private _echoedResultSetUpdate = echo(this._debouncedResultSetUpdate.event); + public readonly onResultSetUpdate = this._debouncedResultSetUpdate.event; private _onQueryStart = this._register(new Emitter()); public readonly onQueryStart: Event = this._onQueryStart.event; @@ -203,9 +203,9 @@ export default class QueryRunner extends Disposable { return TPromise.as(undefined); } this._echoedMessages.clear(); - this._echoedResultSet.clear(); + // this._echoedResultSet.clear(); this._debouncedMessage.clear(); - this._debouncedResultSet.clear(); + // this._debouncedResultSet.clear(); this._planXml = new Deferred(); this._batchSets = []; this._hasCompleted = false;