mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-01-17 17:22:42 -05:00
Reuse existing saved connection that matches args (#4839)
* Reuse existing saved connection that matches args * search subgroups for matches
This commit is contained in:
@@ -5,6 +5,8 @@
|
||||
'use strict';
|
||||
import * as azdata from 'azdata';
|
||||
import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile';
|
||||
import {ConnectionProfileGroup} from 'sql/platform/connection/common/connectionProfileGroup';
|
||||
import { equalsIgnoreCase } from 'vs/base/common/strings';
|
||||
import { ICommandLineProcessing } from 'sql/workbench/services/commandLine/common/commandLine';
|
||||
import { IConnectionManagementService } from 'sql/platform/connection/common/connectionManagement';
|
||||
import { ICapabilitiesService } from 'sql/platform/capabilities/common/capabilitiesService';
|
||||
@@ -136,11 +138,37 @@ export class CommandLineService implements ICommandLineProcessing {
|
||||
profile.serverName = args.server;
|
||||
profile.databaseName = args.database ? args.database : '';
|
||||
profile.userName = args.user ? args.user : '';
|
||||
profile.authenticationType = args.integrated ? 'Integrated' : 'SqlLogin';
|
||||
profile.authenticationType = args.integrated ? Constants.integrated : args.aad ? Constants.azureMFA : (profile.userName.length > 0) ? Constants.sqlLogin : Constants.integrated;
|
||||
profile.connectionName = '';
|
||||
profile.setOptionValue('applicationName', Constants.applicationName);
|
||||
profile.setOptionValue('databaseDisplayName', profile.databaseName);
|
||||
profile.setOptionValue('groupId', profile.groupId);
|
||||
return profile;
|
||||
return this._connectionManagementService ? this.tryMatchSavedProfile(profile) : profile;
|
||||
}
|
||||
|
||||
private tryMatchSavedProfile(profile: ConnectionProfile)
|
||||
{
|
||||
let match: ConnectionProfile = undefined;
|
||||
// If we can find a saved mssql provider connection that matches the args, use it
|
||||
let groups = this._connectionManagementService.getConnectionGroups([Constants.mssqlProviderName]);
|
||||
if (groups && groups.length > 0)
|
||||
{
|
||||
let rootGroup = groups[0];
|
||||
let connections = ConnectionProfileGroup.getConnectionsInGroup(rootGroup);
|
||||
match = connections.find((c) => this.matchProfile(profile, c)) ;
|
||||
}
|
||||
return match ? match : profile;
|
||||
}
|
||||
|
||||
// determines if the 2 profiles are a functional match
|
||||
// profile1 is the profile generated from command line parameters
|
||||
private matchProfile(profile1: ConnectionProfile, profile2: ConnectionProfile): boolean
|
||||
{
|
||||
return equalsIgnoreCase(profile1.serverName,profile2.serverName)
|
||||
&& equalsIgnoreCase(profile1.providerName, profile2.providerName)
|
||||
// case sensitive servers can have 2 databases whose name differs only in case
|
||||
&& profile1.databaseName === profile2.databaseName
|
||||
&& equalsIgnoreCase(profile1.userName, profile2.userName)
|
||||
&& profile1.authenticationType === profile2.authenticationType;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user