Fix IConnectionProfile to have same options key when generated from ConnectionProfile (#22840)

This commit is contained in:
Charles Gagnon
2023-04-25 09:52:51 -07:00
committed by GitHub
parent a887bb199e
commit 64dd4f0904
15 changed files with 71 additions and 13 deletions

View File

@@ -284,6 +284,7 @@ export class ConnectionProfile extends ProviderConnectionInfo implements interfa
serverName: this.serverName,
databaseName: this.databaseName,
authenticationType: this.authenticationType,
serverCapabilities: this.serverCapabilities,
getOptionsKey: this.getOptionsKey,
matches: this.matches,
groupId: this.groupId,

View File

@@ -4,11 +4,13 @@
*--------------------------------------------------------------------------------------------*/
import * as azdata from 'azdata';
import { ConnectionProviderProperties } from 'sql/platform/capabilities/common/capabilitiesService';
// Used to allow various methods of matching profiles
export type ProfileMatcher = (a: IConnectionProfile, b: IConnectionProfile) => boolean;
export interface IConnectionProfile extends azdata.IConnectionProfile {
serverCapabilities: ConnectionProviderProperties | undefined;
getOptionsKey(getOriginalOptions?: boolean): string;
matches(profile: azdata.IConnectionProfile): boolean;
}

View File

@@ -29,7 +29,7 @@ export class ProviderConnectionInfo implements azdata.ConnectionInfo {
this.providerName = isString(model) ? model : 'providerName' in model ? model.providerName : model.providerId;
if (!isString(model)) {
if (model.options && this.hasServerCapabilities()) {
if (model.options && this.serverCapabilities) {
this.serverCapabilities.connectionOptions.forEach(option => {
let value = model.options[option.name];
this.options[option.name] = value;
@@ -136,7 +136,7 @@ export class ProviderConnectionInfo implements azdata.ConnectionInfo {
private getServerInfo() {
let title = '';
if (this.hasServerCapabilities()) {
if (this.serverCapabilities) {
title = this.serverName;
// Only show database name if the provider supports it.
if (this.serverCapabilities.connectionOptions?.find(option => option.specialValueType === ConnectionOptionSpecialType.databaseName)) {
@@ -153,7 +153,7 @@ export class ProviderConnectionInfo implements azdata.ConnectionInfo {
public get title(): string {
let label = '';
if (this.hasServerCapabilities()) {
if (this.serverCapabilities) {
if (this.connectionName) {
label = this.connectionName;
} else {
@@ -169,10 +169,6 @@ export class ProviderConnectionInfo implements azdata.ConnectionInfo {
return label;
}
public hasServerCapabilities(): boolean {
return (this.serverCapabilities !== undefined);
}
public hasLoaded(): boolean {
return Object.keys(this.capabilitiesService.providers).length > 0;
}
@@ -187,7 +183,7 @@ export class ProviderConnectionInfo implements azdata.ConnectionInfo {
public isPasswordRequired(): boolean {
// if there is no provider capabilities metadata assume a password is not required
if (!this.hasServerCapabilities()) {
if (!this.serverCapabilities) {
return false;
}
@@ -218,7 +214,7 @@ export class ProviderConnectionInfo implements azdata.ConnectionInfo {
public getOptionsKey(getOriginalOptions?: boolean): string {
let useFullOptions = false;
let idNames = [];
if (this.hasServerCapabilities()) {
if (this.serverCapabilities) {
useFullOptions = this.serverCapabilities.useFullOptions;
idNames = this.serverCapabilities.connectionOptions.map(o => {
// All options enabled, use every property besides password.
@@ -299,7 +295,7 @@ export class ProviderConnectionInfo implements azdata.ConnectionInfo {
}
public getSpecialTypeOptionName(type: string): string | undefined {
if (this.hasServerCapabilities()) {
if (this.serverCapabilities) {
let optionMetadata = this.serverCapabilities.connectionOptions.find(o => o.specialValueType === type);
return !!optionMetadata ? optionMetadata.name : undefined;
} else {
@@ -315,7 +311,7 @@ export class ProviderConnectionInfo implements azdata.ConnectionInfo {
}
public get authenticationTypeDisplayName(): string {
let optionMetadata = this.hasServerCapabilities() ? this.serverCapabilities.connectionOptions.find(o => o.specialValueType === ConnectionOptionSpecialType.authType) : undefined;
let optionMetadata = this.serverCapabilities ? this.serverCapabilities.connectionOptions.find(o => o.specialValueType === ConnectionOptionSpecialType.authType) : undefined;
let authType = this.authenticationType;
let displayName: string = authType;
@@ -361,7 +357,7 @@ export class ProviderConnectionInfo implements azdata.ConnectionInfo {
public getConnectionOptionsList(needSpecial: boolean, getNonDefault: boolean): azdata.ConnectionOption[] {
let connectionOptions: azdata.ConnectionOption[] = [];
if (this.hasServerCapabilities()) {
if (this.serverCapabilities) {
this.serverCapabilities.connectionOptions.forEach(element => {
if (((!needSpecial && element.specialValueType !== ConnectionOptionSpecialType.serverName &&
element.specialValueType !== ConnectionOptionSpecialType.databaseName &&