From 42e55dd2ddc14622446546396bbe904661c1d017 Mon Sep 17 00:00:00 2001 From: Anthony Dresser Date: Mon, 10 Dec 2018 17:36:35 -0800 Subject: [PATCH] Result Streaming settings (#3537) * add setting control for result streaming * change default result streaming to true --- .../parts/query/common/query.contribution.ts | 5 ++ src/sql/parts/query/editor/gridPanel.ts | 66 ++++++++++++------- 2 files changed, 49 insertions(+), 22 deletions(-) diff --git a/src/sql/parts/query/common/query.contribution.ts b/src/sql/parts/query/common/query.contribution.ts index 75a2ee130e..5792d01e00 100644 --- a/src/sql/parts/query/common/query.contribution.ts +++ b/src/sql/parts/query/common/query.contribution.ts @@ -305,6 +305,11 @@ let registryProperties = { 'description': localize('sql.saveAsCsv.encoding', '[Optional] File encoding used when saving results as CSV'), 'default': 'utf-8' }, + 'sql.results.streaming': { + 'type': 'boolean', + 'description': localize('sql.results.streaming', 'Enable results streaming; contains few minor visual issues'), + 'default': true + }, 'sql.copyIncludeHeaders': { 'type': 'boolean', 'description': localize('sql.copyIncludeHeaders', '[Optional] Configuration options for copying results from the Results View'), diff --git a/src/sql/parts/query/editor/gridPanel.ts b/src/sql/parts/query/editor/gridPanel.ts index abe28a5ba1..fe19fcaa0b 100644 --- a/src/sql/parts/query/editor/gridPanel.ts +++ b/src/sql/parts/query/editor/gridPanel.ts @@ -188,23 +188,24 @@ export class GridPanel extends ViewletPanel { } private onResultSet(resultSet: sqlops.ResultSetSummary | sqlops.ResultSetSummary[]) { - this.addResultSet(resultSet); + if (this.configurationService.getValue('sql.results.streaming')) { + this.addResultSet(resultSet); - this.tables.map(t => { - t.state.canBeMaximized = this.tables.length > 1; - }); + this.tables.map(t => { + t.state.canBeMaximized = this.tables.length > 1; + }); - this.maximumBodySize = this.tables.reduce((p, c) => { - return p + c.maximumSize; - }, 0); + 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.state && this.state.scrollPosition) { + this.splitView.setScrollPosition(this.state.scrollPosition); + } } } private updateResultSet(resultSet: sqlops.ResultSetSummary | sqlops.ResultSetSummary[]) { - let resultsToUpdate: sqlops.ResultSetSummary[]; if (!Array.isArray(resultSet)) { resultsToUpdate = [resultSet]; @@ -212,21 +213,42 @@ export class GridPanel extends ViewletPanel { resultsToUpdate = resultSet; } - for (let set of resultsToUpdate) { - let table = this.tables.find(t => t.resultSet.batchId === set.batchId && t.resultSet.id === set.id); - if (table) { - table.updateResult(set); - } else { - warn('Got result set update request for non-existant table'); + 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); + if (table) { + table.updateResult(set); + } else { + warn('Got result set update request for non-existant table'); + } } - } - this.maximumBodySize = this.tables.reduce((p, c) => { - return p + c.maximumSize; - }, 0); + 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.state && this.state.scrollPosition) { + this.splitView.setScrollPosition(this.state.scrollPosition); + } + } else { + let change = false; + + for (let set of resultsToUpdate) { + if (set.complete) { + this.addResultSet(resultSet); + 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); + } + } } }