mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-28 17:23:19 -05:00
Adds functionality to open execution plans from DB tables and DMVs. (#20377)
* Adds functionality to open execution plans from DB tables and DMVs. * Code review changes * Renames method to getProviderFromUri
This commit is contained in:
@@ -70,7 +70,12 @@ export class ExecutionPlanEditorOverrideContribution extends Disposable implemen
|
||||
},
|
||||
{},
|
||||
(editorInput, group) => {
|
||||
const executionPlanInput = this._instantiationService.createInstance(ExecutionPlanInput, editorInput.resource);
|
||||
const executionPlanGraphInfo = {
|
||||
graphFileContent: undefined,
|
||||
graphFileType: undefined
|
||||
};
|
||||
|
||||
const executionPlanInput = this._instantiationService.createInstance(ExecutionPlanInput, editorInput.resource, executionPlanGraphInfo);
|
||||
return { editor: executionPlanInput, options: editorInput.options, group: group };
|
||||
}
|
||||
);
|
||||
|
||||
@@ -5,23 +5,41 @@
|
||||
|
||||
import * as path from 'vs/base/common/path';
|
||||
import { URI } from 'vs/base/common/uri';
|
||||
import { localize } from 'vs/nls';
|
||||
import { EditorInput } from 'vs/workbench/common/editor/editorInput';
|
||||
import { EditorModel } from 'vs/workbench/common/editor/editorModel';
|
||||
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
|
||||
import { ITextFileService } from 'vs/workbench/services/textfile/common/textfiles';
|
||||
import * as azdata from 'azdata';
|
||||
|
||||
export class ExecutionPlanInput extends EditorInput {
|
||||
|
||||
public static ID: string = 'workbench.editorinputs.executionplan';
|
||||
public static SCHEMA: string = 'executionplan';
|
||||
private readonly editorNamePrefix = localize('epCompare.executionPlanEditorName', 'ExecutionPlan');
|
||||
private _editorName: string;
|
||||
|
||||
private _content?: string;
|
||||
public _executionPlanFileViewUUID: string;
|
||||
|
||||
constructor(
|
||||
private _uri: URI,
|
||||
private _uri: URI | undefined,
|
||||
private executionPlanGraphinfo: azdata.executionPlan.ExecutionPlanGraphInfo,
|
||||
@ITextFileService private readonly _fileService: ITextFileService,
|
||||
@IEditorService private readonly _editorService: IEditorService
|
||||
) {
|
||||
super();
|
||||
|
||||
if (this._uri === undefined && !!this.executionPlanGraphinfo.graphFileContent && !!this.executionPlanGraphinfo.graphFileType) {
|
||||
const existingNames = this._editorService.editors.map(editor => editor.getName());
|
||||
let i = 0;
|
||||
this._editorName = `${this.editorNamePrefix}${i}.${this.executionPlanGraphinfo.graphFileType}`;
|
||||
while (existingNames.includes(this._editorName)) {
|
||||
i++;
|
||||
this._editorName = `${this.editorNamePrefix}${i}.${this.executionPlanGraphinfo.graphFileType}`;
|
||||
}
|
||||
|
||||
this._uri = URI.parse(this._editorName);
|
||||
}
|
||||
}
|
||||
|
||||
public get executionPlanFileViewUUID(): string {
|
||||
@@ -37,14 +55,18 @@ export class ExecutionPlanInput extends EditorInput {
|
||||
}
|
||||
|
||||
public override getName(): string {
|
||||
if (this._editorName) {
|
||||
return this._editorName;
|
||||
}
|
||||
|
||||
return path.basename(this._uri.fsPath);
|
||||
}
|
||||
|
||||
public async content(): Promise<string> {
|
||||
if (!this._content) {
|
||||
this._content = (await this._fileService.read(this._uri, { acceptTextOnly: true })).value;
|
||||
if (!this.executionPlanGraphinfo.graphFileContent) {
|
||||
this.executionPlanGraphinfo.graphFileContent = (await this._fileService.read(this._uri, { acceptTextOnly: true })).value;
|
||||
}
|
||||
return this._content;
|
||||
return this.executionPlanGraphinfo.graphFileContent;
|
||||
}
|
||||
|
||||
public getUri(): string {
|
||||
@@ -60,8 +82,8 @@ export class ExecutionPlanInput extends EditorInput {
|
||||
}
|
||||
|
||||
public override async resolve(refresh?: boolean): Promise<EditorModel | undefined> {
|
||||
if (!this._content) {
|
||||
this._content = (await this._fileService.read(this._uri, { acceptTextOnly: true })).value;
|
||||
if (!this.executionPlanGraphinfo.graphFileContent) {
|
||||
this.executionPlanGraphinfo.graphFileContent = (await this._fileService.read(this._uri, { acceptTextOnly: true })).value;
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user