mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-16 10:58:30 -05:00
This commit is contained in:
@@ -27,13 +27,10 @@ export class UntitledQueryEditorInput extends QueryEditorInput implements IUntit
|
|||||||
|
|
||||||
public static readonly ID = UNTITLED_QUERY_EDITOR_TYPEID;
|
public static readonly ID = UNTITLED_QUERY_EDITOR_TYPEID;
|
||||||
|
|
||||||
private originalConnectionUri: string;
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
description: string | undefined,
|
description: string | undefined,
|
||||||
text: UntitledTextEditorInput,
|
text: UntitledTextEditorInput,
|
||||||
results: QueryResultsInput,
|
results: QueryResultsInput,
|
||||||
initialConnectionUri: string | undefined,
|
|
||||||
@IConnectionManagementService connectionManagementService: IConnectionManagementService,
|
@IConnectionManagementService connectionManagementService: IConnectionManagementService,
|
||||||
@IQueryModelService queryModelService: IQueryModelService,
|
@IQueryModelService queryModelService: IQueryModelService,
|
||||||
@IConfigurationService configurationService: IConfigurationService,
|
@IConfigurationService configurationService: IConfigurationService,
|
||||||
@@ -42,7 +39,6 @@ export class UntitledQueryEditorInput extends QueryEditorInput implements IUntit
|
|||||||
@IEditorResolverService private readonly editorResolverService: IEditorResolverService
|
@IEditorResolverService private readonly editorResolverService: IEditorResolverService
|
||||||
) {
|
) {
|
||||||
super(description, text, results, connectionManagementService, queryModelService, configurationService, instantiationService);
|
super(description, text, results, connectionManagementService, queryModelService, configurationService, instantiationService);
|
||||||
this.originalConnectionUri = initialConnectionUri;
|
|
||||||
// Set the mode explicitely to stop the auto language detection service from changing the mode unexpectedly.
|
// Set the mode explicitely to stop the auto language detection service from changing the mode unexpectedly.
|
||||||
// the auto language detection service won't do the language change only if the mode is explicitely set.
|
// the auto language detection service won't do the language change only if the mode is explicitely set.
|
||||||
// if the mode (e.g. kusto, sql) do not exist for whatever reason, we will default it to sql.
|
// if the mode (e.g. kusto, sql) do not exist for whatever reason, we will default it to sql.
|
||||||
@@ -125,11 +121,4 @@ export class UntitledQueryEditorInput extends QueryEditorInput implements IUntit
|
|||||||
// Subclasses need to explicitly opt-in to being untitled.
|
// Subclasses need to explicitly opt-in to being untitled.
|
||||||
return EditorInputCapabilities.Untitled;
|
return EditorInputCapabilities.Untitled;
|
||||||
}
|
}
|
||||||
|
|
||||||
override dispose() {
|
|
||||||
if (this.originalConnectionUri) {
|
|
||||||
this.connectionManagementService.disconnect(this.originalConnectionUri);
|
|
||||||
}
|
|
||||||
super.dispose();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,8 +14,6 @@ import * as azdata from 'azdata';
|
|||||||
import * as nls from 'vs/nls';
|
import * as nls from 'vs/nls';
|
||||||
import { values } from 'vs/base/common/collections';
|
import { values } from 'vs/base/common/collections';
|
||||||
import { Schemas } from 'vs/base/common/network';
|
import { Schemas } from 'vs/base/common/network';
|
||||||
import { generateUuid } from 'vs/base/common/uuid';
|
|
||||||
import * as ConnectionUtils from 'sql/platform/connection/common/utils';
|
|
||||||
|
|
||||||
export class ConnectionStatusManager {
|
export class ConnectionStatusManager {
|
||||||
|
|
||||||
@@ -85,23 +83,8 @@ export class ConnectionStatusManager {
|
|||||||
return connectionInfoForId ? connectionInfoForId.connectionProfile : undefined;
|
return connectionInfoForId ? connectionInfoForId.connectionProfile : undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
private isNonEditorUri(uri: string): boolean {
|
|
||||||
return uri.startsWith(ConnectionUtils.uriPrefixes.connection)
|
|
||||||
|| uri.startsWith(ConnectionUtils.uriPrefixes.dashboard)
|
|
||||||
|| uri.startsWith(ConnectionUtils.uriPrefixes.insights)
|
|
||||||
|| uri.startsWith(ConnectionUtils.uriPrefixes.notebook);
|
|
||||||
}
|
|
||||||
|
|
||||||
public addConnection(connection: IConnectionProfile, id: string): ConnectionManagementInfo {
|
public addConnection(connection: IConnectionProfile, id: string): ConnectionManagementInfo {
|
||||||
this._logService.info(`Adding connection ${id}`);
|
this._logService.info(`Adding connection ${id}`);
|
||||||
|
|
||||||
// Newly generated URIs are used in areas where the same connection profile id is expected for callbacks,
|
|
||||||
// This is used for Editor URIs such as Query Editor, which do not have uriPrefixes recognized above.
|
|
||||||
// (This is done to not retrieve the base connection profile, which may be different if a user changes the database).
|
|
||||||
if (!this.isNonEditorUri(id) && this.findConnectionByProfileId(connection.id) !== undefined) {
|
|
||||||
connection.id = generateUuid();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Always create a copy and save that in the list
|
// Always create a copy and save that in the list
|
||||||
let connectionProfile = new ConnectionProfile(this._capabilitiesService, connection);
|
let connectionProfile = new ConnectionProfile(this._capabilitiesService, connection);
|
||||||
let connectionInfo: ConnectionManagementInfo = {
|
let connectionInfo: ConnectionManagementInfo = {
|
||||||
|
|||||||
@@ -250,16 +250,13 @@ suite('SQL ConnectionStatusManager tests', () => {
|
|||||||
newConnection.id = 'test_id';
|
newConnection.id = 'test_id';
|
||||||
newConnection.serverName = 'new_server_name';
|
newConnection.serverName = 'new_server_name';
|
||||||
newConnection.options['databaseDisplayName'] = newConnection.databaseName;
|
newConnection.options['databaseDisplayName'] = newConnection.databaseName;
|
||||||
//Duplicate should not be registered if uri is of connection/dashboard type (required for functionality)
|
connections.addConnection(newConnection, 'test_uri_1');
|
||||||
connections.addConnection(newConnection, 'connection:test_uri_1');
|
connections.addConnection(newConnection, 'test_uri_2');
|
||||||
connections.addConnection(newConnection, 'dashboard:test_uri_1');
|
|
||||||
//Editor type URIs should generate a new profile id (needed to properly update the connection string)
|
|
||||||
connections.addConnection(newConnection, 'untitled:TestQuery1')
|
|
||||||
newConnection = new ConnectionProfile(capabilitiesService, newConnection);
|
newConnection = new ConnectionProfile(capabilitiesService, newConnection);
|
||||||
|
|
||||||
// Get the connections and verify that the non editor duplicate is only returned once
|
// Get the connections and verify that the duplicate is only returned once
|
||||||
let activeConnections = connections.getActiveConnectionProfiles();
|
let activeConnections = connections.getActiveConnectionProfiles();
|
||||||
assert.strictEqual(activeConnections.length, 5);
|
assert.strictEqual(activeConnections.length, 4);
|
||||||
assert.strictEqual(activeConnections.filter(connection => connection.matches(newConnection)).length, 2, 'Did not find newConnection in active connections');
|
assert.strictEqual(activeConnections.filter(connection => connection.matches(newConnection)).length, 1, 'Did not find newConnection in active connections');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -44,7 +44,6 @@ export class EditDataInput extends EditorInput implements IConnectableInput {
|
|||||||
private _sql: UntitledTextEditorInput,
|
private _sql: UntitledTextEditorInput,
|
||||||
private _queryString: string,
|
private _queryString: string,
|
||||||
private _results: EditDataResultsInput,
|
private _results: EditDataResultsInput,
|
||||||
private _initialConnectionUri: string,
|
|
||||||
@IConnectionManagementService private _connectionManagementService: IConnectionManagementService,
|
@IConnectionManagementService private _connectionManagementService: IConnectionManagementService,
|
||||||
@IQueryModelService private _queryModelService: IQueryModelService,
|
@IQueryModelService private _queryModelService: IQueryModelService,
|
||||||
@INotificationService private notificationService: INotificationService
|
@INotificationService private notificationService: INotificationService
|
||||||
@@ -206,9 +205,6 @@ export class EditDataInput extends EditorInput implements IConnectableInput {
|
|||||||
public override dispose(): void {
|
public override dispose(): void {
|
||||||
// Dispose our edit session then disconnect our input
|
// Dispose our edit session then disconnect our input
|
||||||
this._queryModelService.disposeEdit(this.uri).then(() => {
|
this._queryModelService.disposeEdit(this.uri).then(() => {
|
||||||
if (this._initialConnectionUri) {
|
|
||||||
this._connectionManagementService.disconnect(this._initialConnectionUri);
|
|
||||||
}
|
|
||||||
return this._connectionManagementService.disconnectEditor(this, true);
|
return this._connectionManagementService.disconnectEditor(this, true);
|
||||||
});
|
});
|
||||||
this._queryModelService.disposeQuery(this.uri);
|
this._queryModelService.disposeQuery(this.uri);
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ export async function scriptSelect(connectionProfile: IConnectionProfile, metada
|
|||||||
let paramDetails = getScriptingParamDetails(connectionService, connectionResult, metadata)!;
|
let paramDetails = getScriptingParamDetails(connectionService, connectionResult, metadata)!;
|
||||||
const result = await scriptingService.script(connectionResult, metadata, ScriptOperation.Select, paramDetails);
|
const result = await scriptingService.script(connectionResult, metadata, ScriptOperation.Select, paramDetails);
|
||||||
if (result && result.script) {
|
if (result && result.script) {
|
||||||
const owner = await queryEditorService.newSqlEditor({ initialContent: result.script }, connectionProfile?.providerName, connectionResult);
|
const owner = await queryEditorService.newSqlEditor({ initialContent: result.script }, connectionProfile?.providerName);
|
||||||
// Connect our editor to the input connection
|
// Connect our editor to the input connection
|
||||||
let options: IConnectionCompletionOptions = {
|
let options: IConnectionCompletionOptions = {
|
||||||
params: { connectionType: ConnectionType.editor, runQueryOnCompletion: RunQueryOnConnectionMode.executeQuery, input: owner },
|
params: { connectionType: ConnectionType.editor, runQueryOnCompletion: RunQueryOnConnectionMode.executeQuery, input: owner },
|
||||||
@@ -75,7 +75,7 @@ export async function scriptEditSelect(connectionProfile: IConnectionProfile, me
|
|||||||
let paramDetails = getScriptingParamDetails(connectionService, connectionResult, metadata);
|
let paramDetails = getScriptingParamDetails(connectionService, connectionResult, metadata);
|
||||||
const result = await scriptingService.script(connectionResult, metadata, ScriptOperation.Select, paramDetails!);
|
const result = await scriptingService.script(connectionResult, metadata, ScriptOperation.Select, paramDetails!);
|
||||||
if (result && result.script) {
|
if (result && result.script) {
|
||||||
const owner = await queryEditorService.newEditDataEditor(metadata.schema, metadata.name, result.script, connectionResult);
|
const owner = await queryEditorService.newEditDataEditor(metadata.schema, metadata.name, result.script);
|
||||||
// Connect our editor
|
// Connect our editor
|
||||||
let options: IConnectionCompletionOptions = {
|
let options: IConnectionCompletionOptions = {
|
||||||
params: { connectionType: ConnectionType.editor, runQueryOnCompletion: RunQueryOnConnectionMode.none, input: owner },
|
params: { connectionType: ConnectionType.editor, runQueryOnCompletion: RunQueryOnConnectionMode.none, input: owner },
|
||||||
@@ -133,7 +133,7 @@ export async function script(connectionProfile: IConnectionProfile, metadata: az
|
|||||||
|
|
||||||
if (script) {
|
if (script) {
|
||||||
let description = (metadata.schema && metadata.schema !== '') ? `${metadata.schema}.${metadata.name}` : metadata.name;
|
let description = (metadata.schema && metadata.schema !== '') ? `${metadata.schema}.${metadata.name}` : metadata.name;
|
||||||
const owner = await queryEditorService.newSqlEditor({ initialContent: script, description }, connectionProfile.providerName, connectionResult);
|
const owner = await queryEditorService.newSqlEditor({ initialContent: script, description }, connectionProfile.providerName);
|
||||||
// Connect our editor to the input connection
|
// Connect our editor to the input connection
|
||||||
let options: IConnectionCompletionOptions = {
|
let options: IConnectionCompletionOptions = {
|
||||||
params: { connectionType: ConnectionType.editor, runQueryOnCompletion: RunQueryOnConnectionMode.none, input: owner },
|
params: { connectionType: ConnectionType.editor, runQueryOnCompletion: RunQueryOnConnectionMode.none, input: owner },
|
||||||
|
|||||||
@@ -146,7 +146,7 @@ export abstract class QueryEditorInput extends EditorInput implements IConnectab
|
|||||||
private _description: string | undefined,
|
private _description: string | undefined,
|
||||||
protected _text: AbstractTextResourceEditorInput,
|
protected _text: AbstractTextResourceEditorInput,
|
||||||
protected _results: QueryResultsInput,
|
protected _results: QueryResultsInput,
|
||||||
@IConnectionManagementService protected readonly connectionManagementService: IConnectionManagementService,
|
@IConnectionManagementService private readonly connectionManagementService: IConnectionManagementService,
|
||||||
@IQueryModelService private readonly queryModelService: IQueryModelService,
|
@IQueryModelService private readonly queryModelService: IQueryModelService,
|
||||||
@IConfigurationService private readonly configurationService: IConfigurationService,
|
@IConfigurationService private readonly configurationService: IConfigurationService,
|
||||||
@IInstantiationService protected readonly instantiationService: IInstantiationService
|
@IInstantiationService protected readonly instantiationService: IInstantiationService
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ export class QueryEditorLanguageAssociation implements ILanguageAssociation {
|
|||||||
if (activeEditor instanceof FileEditorInput) {
|
if (activeEditor instanceof FileEditorInput) {
|
||||||
queryEditorInput = this.instantiationService.createInstance(FileQueryEditorInput, '', activeEditor, queryResultsInput);
|
queryEditorInput = this.instantiationService.createInstance(FileQueryEditorInput, '', activeEditor, queryResultsInput);
|
||||||
} else if (activeEditor instanceof UntitledTextEditorInput) {
|
} else if (activeEditor instanceof UntitledTextEditorInput) {
|
||||||
queryEditorInput = this.instantiationService.createInstance(UntitledQueryEditorInput, '', activeEditor, queryResultsInput, undefined);
|
queryEditorInput = this.instantiationService.createInstance(UntitledQueryEditorInput, '', activeEditor, queryResultsInput);
|
||||||
} else {
|
} else {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
@@ -146,7 +146,7 @@ export class UntitledQueryEditorSerializer implements IEditorSerializer {
|
|||||||
const factory = editorFactoryRegistry.getEditorSerializer(UntitledTextEditorInput.ID);
|
const factory = editorFactoryRegistry.getEditorSerializer(UntitledTextEditorInput.ID);
|
||||||
const untitledEditorInput = factory.deserialize(instantiationService, serializedEditorInput) as UntitledTextEditorInput;
|
const untitledEditorInput = factory.deserialize(instantiationService, serializedEditorInput) as UntitledTextEditorInput;
|
||||||
const queryResultsInput = instantiationService.createInstance(QueryResultsInput, untitledEditorInput.resource.toString());
|
const queryResultsInput = instantiationService.createInstance(QueryResultsInput, untitledEditorInput.resource.toString());
|
||||||
return instantiationService.createInstance(UntitledQueryEditorInput, '', untitledEditorInput, queryResultsInput, undefined);
|
return instantiationService.createInstance(UntitledQueryEditorInput, '', untitledEditorInput, queryResultsInput);
|
||||||
}
|
}
|
||||||
|
|
||||||
canSerialize(): boolean { // we can always serialize query inputs
|
canSerialize(): boolean { // we can always serialize query inputs
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ suite('SQL QueryAction Tests', () => {
|
|||||||
testQueryInputState = TypeMoq.Mock.ofType(QueryEditorState, TypeMoq.MockBehavior.Strict);
|
testQueryInputState = TypeMoq.Mock.ofType(QueryEditorState, TypeMoq.MockBehavior.Strict);
|
||||||
testQueryInputState.setup(x => x.isActualExecutionPlanMode).returns(() => false);
|
testQueryInputState.setup(x => x.isActualExecutionPlanMode).returns(() => false);
|
||||||
|
|
||||||
testQueryInput = TypeMoq.Mock.ofType(UntitledQueryEditorInput, TypeMoq.MockBehavior.Strict, undefined, fileInput, undefined, undefined, connectionManagementService.object, queryModelService.object, configurationService.object);
|
testQueryInput = TypeMoq.Mock.ofType(UntitledQueryEditorInput, TypeMoq.MockBehavior.Strict, undefined, fileInput, undefined, connectionManagementService.object, queryModelService.object, configurationService.object);
|
||||||
testQueryInput.setup(x => x.uri).returns(() => testUri);
|
testQueryInput.setup(x => x.uri).returns(() => testUri);
|
||||||
testQueryInput.setup(x => x.runQuery(undefined)).callback(() => { calledRunQueryOnInput = true; });
|
testQueryInput.setup(x => x.runQuery(undefined)).callback(() => { calledRunQueryOnInput = true; });
|
||||||
testQueryInput.setup(x => x.state).returns(() => testQueryInputState.object);
|
testQueryInput.setup(x => x.state).returns(() => testQueryInputState.object);
|
||||||
@@ -150,7 +150,7 @@ suite('SQL QueryAction Tests', () => {
|
|||||||
let queryInputState = TypeMoq.Mock.ofType(QueryEditorState, TypeMoq.MockBehavior.Loose);
|
let queryInputState = TypeMoq.Mock.ofType(QueryEditorState, TypeMoq.MockBehavior.Loose);
|
||||||
queryInputState.setup(x => x.isActualExecutionPlanMode).returns(() => false);
|
queryInputState.setup(x => x.isActualExecutionPlanMode).returns(() => false);
|
||||||
|
|
||||||
let queryInput = TypeMoq.Mock.ofType(UntitledQueryEditorInput, TypeMoq.MockBehavior.Strict, undefined, fileInput, undefined, undefined, connectionManagementService.object, queryModelService.object, configurationService.object);
|
let queryInput = TypeMoq.Mock.ofType(UntitledQueryEditorInput, TypeMoq.MockBehavior.Strict, undefined, fileInput, undefined, connectionManagementService.object, queryModelService.object, configurationService.object);
|
||||||
queryInput.setup(x => x.uri).returns(() => testUri);
|
queryInput.setup(x => x.uri).returns(() => testUri);
|
||||||
queryInput.setup(x => x.runQuery(undefined)).callback(() => {
|
queryInput.setup(x => x.runQuery(undefined)).callback(() => {
|
||||||
countCalledRunQuery++;
|
countCalledRunQuery++;
|
||||||
@@ -205,7 +205,7 @@ suite('SQL QueryAction Tests', () => {
|
|||||||
let queryInputState = TypeMoq.Mock.ofType(QueryEditorState, TypeMoq.MockBehavior.Loose);
|
let queryInputState = TypeMoq.Mock.ofType(QueryEditorState, TypeMoq.MockBehavior.Loose);
|
||||||
queryInputState.setup(x => x.isActualExecutionPlanMode).returns(() => false);
|
queryInputState.setup(x => x.isActualExecutionPlanMode).returns(() => false);
|
||||||
|
|
||||||
let queryInput = TypeMoq.Mock.ofType(UntitledQueryEditorInput, TypeMoq.MockBehavior.Loose, undefined, fileInput, undefined, undefined, connectionManagementService.object, queryModelService.object, configurationService.object);
|
let queryInput = TypeMoq.Mock.ofType(UntitledQueryEditorInput, TypeMoq.MockBehavior.Loose, undefined, fileInput, undefined, connectionManagementService.object, queryModelService.object, configurationService.object);
|
||||||
queryInput.setup(x => x.uri).returns(() => testUri);
|
queryInput.setup(x => x.uri).returns(() => testUri);
|
||||||
queryInput.setup(x => x.runQuery(TypeMoq.It.isAny())).callback((selection: IRange) => {
|
queryInput.setup(x => x.runQuery(TypeMoq.It.isAny())).callback((selection: IRange) => {
|
||||||
runQuerySelection = selection;
|
runQuerySelection = selection;
|
||||||
|
|||||||
@@ -311,7 +311,6 @@ suite('SQL QueryEditor Tests', () => {
|
|||||||
'',
|
'',
|
||||||
fileInput,
|
fileInput,
|
||||||
undefined,
|
undefined,
|
||||||
undefined,
|
|
||||||
connectionManagementService.object,
|
connectionManagementService.object,
|
||||||
queryModelService.object,
|
queryModelService.object,
|
||||||
configurationService.object,
|
configurationService.object,
|
||||||
|
|||||||
@@ -187,7 +187,7 @@ suite('Query Input Factory', () => {
|
|||||||
const newsqlEditorStub = sinon.stub(queryeditorservice, 'newSqlEditor').callsFake(() => {
|
const newsqlEditorStub = sinon.stub(queryeditorservice, 'newSqlEditor').callsFake(() => {
|
||||||
const untitledInput = instantiationService.createInstance(UntitledTextEditorInput, untitledService.create());
|
const untitledInput = instantiationService.createInstance(UntitledTextEditorInput, untitledService.create());
|
||||||
const queryResultsInput: QueryResultsInput = instantiationService.createInstance(QueryResultsInput, untitledInput.resource.toString());
|
const queryResultsInput: QueryResultsInput = instantiationService.createInstance(QueryResultsInput, untitledInput.resource.toString());
|
||||||
let queryInput = instantiationService.createInstance(UntitledQueryEditorInput, '', untitledInput, queryResultsInput, undefined);
|
let queryInput = instantiationService.createInstance(UntitledQueryEditorInput, '', untitledInput, queryResultsInput);
|
||||||
return Promise.resolve(queryInput);
|
return Promise.resolve(queryInput);
|
||||||
});
|
});
|
||||||
const input = instantiationService.createInstance(UntitledTextEditorInput, untitledService.create());
|
const input = instantiationService.createInstance(UntitledTextEditorInput, untitledService.create());
|
||||||
@@ -319,7 +319,7 @@ suite('Query Input Factory', () => {
|
|||||||
const newsqlEditorStub = sinon.stub(queryeditorservice, 'newSqlEditor').callsFake(() => {
|
const newsqlEditorStub = sinon.stub(queryeditorservice, 'newSqlEditor').callsFake(() => {
|
||||||
const untitledInput = instantiationService.createInstance(UntitledTextEditorInput, untitledService.create());
|
const untitledInput = instantiationService.createInstance(UntitledTextEditorInput, untitledService.create());
|
||||||
const queryResultsInput: QueryResultsInput = instantiationService.createInstance(QueryResultsInput, untitledInput.resource.toString());
|
const queryResultsInput: QueryResultsInput = instantiationService.createInstance(QueryResultsInput, untitledInput.resource.toString());
|
||||||
let queryInput = instantiationService.createInstance(UntitledQueryEditorInput, '', untitledInput, queryResultsInput, undefined);
|
let queryInput = instantiationService.createInstance(UntitledQueryEditorInput, '', untitledInput, queryResultsInput);
|
||||||
return Promise.resolve(queryInput);
|
return Promise.resolve(queryInput);
|
||||||
});
|
});
|
||||||
const response = queryEditorLanguageAssociation.convertInput(input);
|
const response = queryEditorLanguageAssociation.convertInput(input);
|
||||||
@@ -349,7 +349,7 @@ class MockEditorService extends TestEditorService {
|
|||||||
const accessor = workbenchinstantiationService.createInstance(ServiceAccessor);
|
const accessor = workbenchinstantiationService.createInstance(ServiceAccessor);
|
||||||
const service = accessor.untitledTextEditorService;
|
const service = accessor.untitledTextEditorService;
|
||||||
const untitledInput = instantiationService.createInstance(UntitledTextEditorInput, service.create({ associatedResource: URI.file('/test/file') }));
|
const untitledInput = instantiationService.createInstance(UntitledTextEditorInput, service.create({ associatedResource: URI.file('/test/file') }));
|
||||||
this.__activeEditor = instantiationService.createInstance(UntitledQueryEditorInput, '', untitledInput, undefined, undefined);
|
this.__activeEditor = instantiationService.createInstance(UntitledQueryEditorInput, '', untitledInput, undefined);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -992,7 +992,7 @@ suite('SQL ConnectionManagementService tests', () => {
|
|||||||
|
|
||||||
test('Edit Connection - Changing connection profile name for same URI should persist after edit', async () => {
|
test('Edit Connection - Changing connection profile name for same URI should persist after edit', async () => {
|
||||||
let profile = Object.assign({}, connectionProfile);
|
let profile = Object.assign({}, connectionProfile);
|
||||||
let uri1 = 'connection:test_uri1';
|
let uri1 = 'test_uri1';
|
||||||
let newname = 'connection renamed';
|
let newname = 'connection renamed';
|
||||||
let options: IConnectionCompletionOptions = {
|
let options: IConnectionCompletionOptions = {
|
||||||
params: {
|
params: {
|
||||||
@@ -1021,21 +1021,20 @@ suite('SQL ConnectionManagementService tests', () => {
|
|||||||
let result = newProfile.getOptionsKey() === originalProfileKey;
|
let result = newProfile.getOptionsKey() === originalProfileKey;
|
||||||
return Promise.resolve(result);
|
return Promise.resolve(result);
|
||||||
});
|
});
|
||||||
profile.getOptionsKey = () => { return 'test_uri1'; };
|
|
||||||
await connect(uri1, options, true, profile);
|
await connect(uri1, options, true, profile);
|
||||||
let originalProfile = ConnectionProfile.fromIConnectionProfile(new TestCapabilitiesService(), connectionProfile);
|
let originalProfile = ConnectionProfile.fromIConnectionProfile(new TestCapabilitiesService(), connectionProfile);
|
||||||
originalProfileKey = originalProfile.getOptionsKey();
|
originalProfileKey = originalProfile.getOptionsKey();
|
||||||
let newProfile = Object.assign({}, connectionProfile);
|
let newProfile = Object.assign({}, connectionProfile);
|
||||||
newProfile.connectionName = newname;
|
newProfile.connectionName = newname;
|
||||||
newProfile.getOptionsKey = () => { return 'test_uri1'; };
|
|
||||||
options.params.isEditConnection = true;
|
options.params.isEditConnection = true;
|
||||||
await connect(uri1, options, true, newProfile);
|
await connect(uri1, options, true, newProfile);
|
||||||
assert.strictEqual(connectionManagementService.getConnectionProfile(uri1).connectionName, newname);
|
assert.strictEqual(connectionManagementService.getConnectionProfile(uri1).connectionName, newname);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('Edit Connection - Connecting a different non editor URI with same profile via edit should not change profile ID.', async () => {
|
test('Edit Connection - Connecting a different URI with same profile via edit should not change profile ID.', async () => {
|
||||||
let currentUri = 'test_uri1';
|
let uri1 = 'test_uri1';
|
||||||
let uri = 'connection:' + currentUri;
|
let uri2 = 'test_uri2';
|
||||||
let profile = Object.assign({}, connectionProfile);
|
let profile = Object.assign({}, connectionProfile);
|
||||||
profile.id = '0451';
|
profile.id = '0451';
|
||||||
let options: IConnectionCompletionOptions = {
|
let options: IConnectionCompletionOptions = {
|
||||||
@@ -1047,7 +1046,7 @@ suite('SQL ConnectionManagementService tests', () => {
|
|||||||
onConnectStart: undefined,
|
onConnectStart: undefined,
|
||||||
onDisconnect: undefined,
|
onDisconnect: undefined,
|
||||||
onConnectCanceled: undefined,
|
onConnectCanceled: undefined,
|
||||||
uri: uri
|
uri: uri1
|
||||||
},
|
},
|
||||||
queryRange: undefined,
|
queryRange: undefined,
|
||||||
runQueryOnCompletion: RunQueryOnConnectionMode.none,
|
runQueryOnCompletion: RunQueryOnConnectionMode.none,
|
||||||
@@ -1059,17 +1058,14 @@ suite('SQL ConnectionManagementService tests', () => {
|
|||||||
showFirewallRuleOnError: true
|
showFirewallRuleOnError: true
|
||||||
};
|
};
|
||||||
|
|
||||||
// In an actual edit situation, the profile options would be different for different URIs, as a placeholder, we return false.
|
// In an actual edit situation, the profile options would be different for different URIs, as a placeholder, we check the test uris instead here.
|
||||||
connectionStore.setup(x => x.isDuplicateEdit(TypeMoq.It.isAny(), TypeMoq.It.isAny())).returns(() => Promise.resolve(false));
|
connectionStore.setup(x => x.isDuplicateEdit(TypeMoq.It.isAny(), TypeMoq.It.isAny())).returns(() => Promise.resolve(uri1 === uri2));
|
||||||
profile.getOptionsKey = () => { return currentUri; };
|
|
||||||
|
|
||||||
await connect(uri, options, true, profile);
|
await connect(uri1, options, true, profile);
|
||||||
let uri1info = connectionManagementService.getConnectionInfo(uri);
|
|
||||||
options.params.isEditConnection = true;
|
options.params.isEditConnection = true;
|
||||||
currentUri = 'test_uri2';
|
await connect(uri2, options, true, profile);
|
||||||
uri = 'connection:' + currentUri;
|
let uri1info = connectionManagementService.getConnectionInfo(uri1);
|
||||||
await connect(uri, options, true, profile);
|
let uri2info = connectionManagementService.getConnectionInfo(uri2);
|
||||||
let uri2info = connectionManagementService.getConnectionInfo(uri);
|
|
||||||
assert.strictEqual(uri1info.connectionProfile.id, uri2info.connectionProfile.id);
|
assert.strictEqual(uri1info.connectionProfile.id, uri2info.connectionProfile.id);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ export class QueryEditorService implements IQueryEditorService {
|
|||||||
/**
|
/**
|
||||||
* Creates new untitled document for SQL/Kusto query and opens in new editor tab
|
* Creates new untitled document for SQL/Kusto query and opens in new editor tab
|
||||||
*/
|
*/
|
||||||
public async newSqlEditor(options: INewSqlEditorOptions = {}, connectionProviderName?: string, initialConnectionUri?: string): Promise<UntitledQueryEditorInput> {
|
public async newSqlEditor(options: INewSqlEditorOptions = {}, connectionProviderName?: string): Promise<UntitledQueryEditorInput> {
|
||||||
options = mixin(options, defaults, false);
|
options = mixin(options, defaults, false);
|
||||||
// Create file path and file URI
|
// Create file path and file URI
|
||||||
let docUri: URI = options.resource ?? URI.from({ scheme: Schemas.untitled, path: await this.createUntitledSqlFilePath(connectionProviderName) });
|
let docUri: URI = options.resource ?? URI.from({ scheme: Schemas.untitled, path: await this.createUntitledSqlFilePath(connectionProviderName) });
|
||||||
@@ -68,7 +68,7 @@ export class QueryEditorService implements IQueryEditorService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const queryResultsInput: QueryResultsInput = this._instantiationService.createInstance(QueryResultsInput, docUri.toString());
|
const queryResultsInput: QueryResultsInput = this._instantiationService.createInstance(QueryResultsInput, docUri.toString());
|
||||||
let queryInput = this._instantiationService.createInstance(UntitledQueryEditorInput, options.description, fileInput, queryResultsInput, initialConnectionUri);
|
let queryInput = this._instantiationService.createInstance(UntitledQueryEditorInput, options.description, fileInput, queryResultsInput);
|
||||||
let profile: IConnectionProfile | undefined = undefined;
|
let profile: IConnectionProfile | undefined = undefined;
|
||||||
// If we're told to connect then get the connection before opening the editor since it will try to get the connection for the current
|
// If we're told to connect then get the connection before opening the editor since it will try to get the connection for the current
|
||||||
// active editor and so we need to get this before opening a new one.
|
// active editor and so we need to get this before opening a new one.
|
||||||
@@ -94,7 +94,7 @@ export class QueryEditorService implements IQueryEditorService {
|
|||||||
/**
|
/**
|
||||||
* Creates new edit data session
|
* Creates new edit data session
|
||||||
*/
|
*/
|
||||||
public async newEditDataEditor(schemaName: string, tableName: string, sqlContent: string, initialConnectionUri?: string): Promise<IConnectableInput> {
|
public async newEditDataEditor(schemaName: string, tableName: string, sqlContent: string): Promise<IConnectableInput> {
|
||||||
|
|
||||||
// Create file path and file URI
|
// Create file path and file URI
|
||||||
let objectName = schemaName ? schemaName + '.' + tableName : tableName;
|
let objectName = schemaName ? schemaName + '.' + tableName : tableName;
|
||||||
@@ -108,7 +108,7 @@ export class QueryEditorService implements IQueryEditorService {
|
|||||||
(m as UntitledTextEditorModel).setDirty(false);
|
(m as UntitledTextEditorModel).setDirty(false);
|
||||||
// Create an EditDataInput for editing
|
// Create an EditDataInput for editing
|
||||||
const resultsInput: EditDataResultsInput = this._instantiationService.createInstance(EditDataResultsInput, docUri.toString());
|
const resultsInput: EditDataResultsInput = this._instantiationService.createInstance(EditDataResultsInput, docUri.toString());
|
||||||
let editDataInput: EditDataInput = this._instantiationService.createInstance(EditDataInput, docUri, schemaName, tableName, fileInput, sqlContent, resultsInput, initialConnectionUri);
|
let editDataInput: EditDataInput = this._instantiationService.createInstance(EditDataInput, docUri, schemaName, tableName, fileInput, sqlContent, resultsInput);
|
||||||
// Determine whether to show edit data upon opening.
|
// Determine whether to show edit data upon opening.
|
||||||
editDataInput.queryPaneEnabled = this._configurationService.getValue('editor.showEditDataSqlPaneOnStartup');
|
editDataInput.queryPaneEnabled = this._configurationService.getValue('editor.showEditDataSqlPaneOnStartup');
|
||||||
if (sqlContent) {
|
if (sqlContent) {
|
||||||
|
|||||||
@@ -45,8 +45,8 @@ export interface IQueryEditorService {
|
|||||||
_serviceBrand: undefined;
|
_serviceBrand: undefined;
|
||||||
|
|
||||||
// Creates new untitled document for SQL/KUSTO queries and opens it in a new editor tab
|
// Creates new untitled document for SQL/KUSTO queries and opens it in a new editor tab
|
||||||
newSqlEditor(options?: INewSqlEditorOptions, connectionProviderName?: string, initialConnectionUri?: string): Promise<IUntitledQueryEditorInput>;
|
newSqlEditor(options?: INewSqlEditorOptions, connectionProviderName?: string): Promise<IUntitledQueryEditorInput>;
|
||||||
|
|
||||||
// Creates new edit data session
|
// Creates new edit data session
|
||||||
newEditDataEditor(schemaName: string, tableName: string, queryString: string, initialConnectionUri?: string): Promise<IConnectableInput>;
|
newEditDataEditor(schemaName: string, tableName: string, queryString: string): Promise<IConnectableInput>;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ export class TestQueryEditorService implements IQueryEditorService {
|
|||||||
|
|
||||||
async newSqlEditor(options?: INewSqlEditorOptions): Promise<IUntitledQueryEditorInput> {
|
async newSqlEditor(options?: INewSqlEditorOptions): Promise<IUntitledQueryEditorInput> {
|
||||||
const base = await this.editorService.createEditorInput({ resource: undefined, forceUntitled: true }) as UntitledTextEditorInput;
|
const base = await this.editorService.createEditorInput({ resource: undefined, forceUntitled: true }) as UntitledTextEditorInput;
|
||||||
return Promise.resolve(this.instantiationService.createInstance(UntitledQueryEditorInput, '', base, new QueryResultsInput(base.resource.toString(true)), undefined));
|
return Promise.resolve(this.instantiationService.createInstance(UntitledQueryEditorInput, '', base, new QueryResultsInput(base.resource.toString(true))));
|
||||||
}
|
}
|
||||||
|
|
||||||
newEditDataEditor(schemaName: string, tableName: string, queryString: string): Promise<IConnectableInput> {
|
newEditDataEditor(schemaName: string, tableName: string, queryString: string): Promise<IConnectableInput> {
|
||||||
|
|||||||
Reference in New Issue
Block a user