From 175f53040398747b8a49c404c2c8a28fabf6d767 Mon Sep 17 00:00:00 2001 From: Karl Burtram Date: Sat, 22 Apr 2023 08:38:51 -0700 Subject: [PATCH] Fix user default language handling (#2029) --- .../ObjectTypes/Security/UserData.cs | 8 +++---- .../ObjectTypes/User/UserHandler.cs | 23 +++++++++++-------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectManagement/ObjectTypes/Security/UserData.cs b/src/Microsoft.SqlTools.ServiceLayer/ObjectManagement/ObjectTypes/Security/UserData.cs index ab121e55..47b84186 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectManagement/ObjectTypes/Security/UserData.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectManagement/ObjectTypes/Security/UserData.cs @@ -124,11 +124,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement { this.password = DatabaseUtils.GetReadOnlySecureString(userInfo.Password); } - if (!string.IsNullOrEmpty(userInfo.DefaultLanguage) + + this.defaultLanguageAlias = (!string.IsNullOrEmpty(userInfo.DefaultLanguage) && string.Compare(userInfo.DefaultLanguage, SR.DefaultLanguagePlaceholder, StringComparison.Ordinal) != 0) - { - this.defaultLanguageAlias = LanguageUtils.GetLanguageAliasFromDisplayText(userInfo.DefaultLanguage); - } + ? LanguageUtils.GetLanguageAliasFromDisplayText(userInfo.DefaultLanguage) : string.Empty; + this.userType = UserPrototypeData.GetUserTypeFromUserInfo(userInfo); } diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectManagement/ObjectTypes/User/UserHandler.cs b/src/Microsoft.SqlTools.ServiceLayer/ObjectManagement/ObjectTypes/User/UserHandler.cs index 9a1d2321..d07e504e 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectManagement/ObjectTypes/User/UserHandler.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectManagement/ObjectTypes/User/UserHandler.cs @@ -126,14 +126,6 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement bool isSqlAzure = serverConnection.DatabaseEngineType == DatabaseEngineType.SqlAzureDatabase; bool supportsContainedUser = isSqlAzure || UserActions.IsParentDatabaseContained(parentDb); - // set default alias to if needed - if (string.IsNullOrEmpty(defaultLanguageAlias) - && supportsContainedUser - && LanguageUtils.IsDefaultLanguageSupported(dataContainer.Server)) - { - defaultLanguageAlias = SR.DefaultLanguagePlaceholder; - } - // set the fake password placeholder when editing an existing user string password = null; IUserPrototypeWithPassword userWithPwdPrototype = currentUserPrototype as IUserPrototypeWithPassword; @@ -172,6 +164,18 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement } } + string defaultLanguage = null; + if (!parameters.IsNewObject) + { + defaultLanguage = LanguageUtils.FormatLanguageDisplay( + languageOptions.FirstOrDefault( + o => o?.Language.Name == defaultLanguageAlias || o?.Language.Alias == defaultLanguageAlias, null)); + } + if (string.IsNullOrEmpty(defaultLanguage)) + { + defaultLanguage = SR.DefaultLanguagePlaceholder; + } + UserViewInfo userViewInfo = new UserViewInfo() { ObjectInfo = new UserInfo() @@ -184,8 +188,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement DefaultSchema = defaultSchema, OwnedSchemas = schemaNames.ToArray(), DatabaseRoles = databaseRoles.ToArray(), - DefaultLanguage = LanguageUtils.FormatLanguageDisplay( - languageOptions.FirstOrDefault(o => o?.Language.Name == defaultLanguageAlias || o?.Language.Alias == defaultLanguageAlias, null)), + DefaultLanguage = defaultLanguage }, SupportContainedUser = supportsContainedUser, SupportWindowsAuthentication = false,