Allow 'ApplicationName' to be specified for MSSQL connections (#22890)

This commit is contained in:
Cheena Malhotra
2023-05-01 10:55:05 -07:00
committed by GitHub
parent f4952c76b8
commit ea6bb41f45
12 changed files with 81 additions and 39 deletions

View File

@@ -13,6 +13,7 @@ import { isString } from 'vs/base/common/types';
import { deepClone } from 'vs/base/common/objects';
import * as Constants from 'sql/platform/connection/common/constants';
import { URI } from 'vs/base/common/uri';
import { adjustForMssqlAppName } from 'sql/platform/connection/common/utils';
export interface IconPath {
light: URI;
@@ -65,10 +66,17 @@ export class ConnectionProfile extends ProviderConnectionInfo implements interfa
let capabilities = this.capabilitiesService.getCapabilities(this.providerName);
if (capabilities && capabilities.connection && capabilities.connection.connectionOptions) {
const options = capabilities.connection.connectionOptions;
// MSSQL Provider doesn't treat appName as special type anymore.
let appNameOption = options.find(option => option.specialValueType === interfaces.ConnectionOptionSpecialType.appName);
if (appNameOption) {
let appNameKey = appNameOption.name;
this.options[appNameKey] = Constants.applicationName;
} else if (this.providerName === Constants.mssqlProviderName || this.providerName === Constants.mssqlCmsProviderName) {
// Update AppName here for MSSQL and MSSQL-CMS provider to be able to match connection URI with STS.
appNameOption = options.find(option => option.name === Constants.mssqlApplicationNameOption);
if (appNameOption) {
this.options[Constants.mssqlApplicationNameOption] = adjustForMssqlAppName(model.options[Constants.mssqlApplicationNameOption]);
}
}
// Set values for advanced options received in model.
Object.keys(model.options).forEach(a => {

View File

@@ -11,12 +11,14 @@ export const outputChannelName = 'MSSQL';
export const capabilitiesOptions = 'OPTIONS_METADATA';
export const mssqlProviderName = 'MSSQL';
export const mssqlCmsProviderName = 'MSSQL-CMS';
export const mysqlProviderName = 'MYSQL';
export const pgsqlProviderName = 'PGSQL';
export const anyProviderName = '*';
export const connectionProviderContextKey = 'connectionProvider';
export const applicationName = 'azdata';
export const mssqlApplicationNameOption = 'applicationName';
export const defaultEngine = 'defaultEngine';

View File

@@ -7,6 +7,7 @@ import { IConnectionProfile } from 'sql/platform/connection/common/interfaces';
import { ConnectionProfile } from 'sql/platform/connection/common/connectionProfile';
import { ConnectionProfileGroup } from 'sql/platform/connection/common/connectionProfileGroup';
import * as sqlExtHostTypes from 'sql/workbench/api/common/sqlExtHostTypes';
import { applicationName } from 'sql/platform/connection/common/constants';
// CONSTANTS //////////////////////////////////////////////////////////////////////////////////////
const msInH = 3.6e6;
@@ -170,3 +171,11 @@ export function convertToRpcConnectionProfile(profile: IConnectionProfile | unde
return connection;
}
export function adjustForMssqlAppName(currentAppName: string, suffix?: string): string {
let appName = suffix ? applicationName + '-' + suffix : applicationName;
let finalSuffix = '-' + appName;
return (currentAppName && currentAppName !== appName && !currentAppName.endsWith(finalSuffix))
? currentAppName + finalSuffix
: currentAppName ?? appName;
}