mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-19 09:35:36 -05:00
100 lines
3.4 KiB
TypeScript
100 lines
3.4 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the Source EULA. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import * as WorkbenchUtils from 'sql/workbench/common/sqlWorkbenchUtils';
|
|
import { IQueryModelService } from 'sql/platform/query/common/queryModel';
|
|
import QueryRunner from 'sql/platform/query/common/queryRunner';
|
|
|
|
import { IStatusbarItem } from 'vs/workbench/browser/parts/statusbar/statusbar';
|
|
import { IDisposable, combinedDisposable, dispose } from 'vs/base/common/lifecycle';
|
|
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
|
import { IEditorCloseEvent } from 'vs/workbench/common/editor';
|
|
import { append, $, hide, show } from 'vs/base/browser/dom';
|
|
import * as nls from 'vs/nls';
|
|
import { EditorServiceImpl } from 'vs/workbench/browser/parts/editor/editor';
|
|
|
|
export class RowCountStatusBarItem implements IStatusbarItem {
|
|
|
|
private _element: HTMLElement;
|
|
private _flavorElement: HTMLElement;
|
|
|
|
private dispose: IDisposable[];
|
|
|
|
constructor(
|
|
@IEditorService private _editorService: EditorServiceImpl,
|
|
@IQueryModelService private _queryModelService: IQueryModelService
|
|
) { }
|
|
|
|
render(container: HTMLElement): IDisposable {
|
|
let disposables = [
|
|
this._editorService.onDidVisibleEditorsChange(() => this._onEditorsChanged()),
|
|
this._editorService.onDidCloseEditor(event => this._onEditorClosed(event))
|
|
];
|
|
|
|
this._element = append(container, $('.query-statusbar-group'));
|
|
this._flavorElement = append(this._element, $('.editor-status-selection'));
|
|
this._flavorElement.title = nls.localize('rowStatus', "Row Count");
|
|
hide(this._flavorElement);
|
|
|
|
this._showStatus();
|
|
|
|
return combinedDisposable(disposables);
|
|
}
|
|
|
|
private _onEditorsChanged() {
|
|
this._showStatus();
|
|
}
|
|
|
|
private _onEditorClosed(event: IEditorCloseEvent) {
|
|
hide(this._flavorElement);
|
|
}
|
|
|
|
// Show/hide query status for active editor
|
|
private _showStatus(): void {
|
|
hide(this._flavorElement);
|
|
dispose(this.dispose);
|
|
this.dispose = [];
|
|
let activeEditor = this._editorService.activeControl;
|
|
if (activeEditor) {
|
|
let currentUri = WorkbenchUtils.getEditorUri(activeEditor.input);
|
|
if (currentUri) {
|
|
let queryRunner = this._queryModelService.getQueryRunner(currentUri);
|
|
if (queryRunner) {
|
|
if (queryRunner.hasCompleted) {
|
|
this._displayValue(queryRunner);
|
|
}
|
|
this.dispose.push(queryRunner.onQueryEnd(e => {
|
|
this._displayValue(queryRunner);
|
|
}));
|
|
this.dispose.push(queryRunner.onQueryStart(e => {
|
|
hide(this._flavorElement);
|
|
}));
|
|
} else {
|
|
this.dispose.push(this._queryModelService.onRunQueryComplete(e => {
|
|
if (e === currentUri) {
|
|
this._displayValue(this._queryModelService.getQueryRunner(currentUri));
|
|
}
|
|
}));
|
|
this.dispose.push(this._queryModelService.onRunQueryStart(e => {
|
|
if (e === currentUri) {
|
|
hide(this._flavorElement);
|
|
}
|
|
}));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private _displayValue(runner: QueryRunner) {
|
|
let rowCount = runner.batchSets.reduce((p, c) => {
|
|
return p + c.resultSetSummaries.reduce((rp, rc) => {
|
|
return rp + rc.rowCount;
|
|
}, 0);
|
|
}, 0);
|
|
this._flavorElement.innerText = nls.localize('rowCount', "{0} rows", rowCount);
|
|
show(this._flavorElement);
|
|
}
|
|
}
|