From 0eaf60c93aa771f9c1339acc6e1500d05910662e Mon Sep 17 00:00:00 2001 From: Matt Irvine Date: Mon, 12 Feb 2018 11:13:03 -0800 Subject: [PATCH] Detect system connection for OE if database display name is blank (#583) --- .../ObjectExplorer/ObjectExplorerService.cs | 8 ++++---- .../TestConnectionProfileService.cs | 2 ++ .../ObjectExplorer/ObjectExplorerServiceTests.cs | 15 +++++++++++++++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/ObjectExplorerService.cs b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/ObjectExplorerService.cs index 2bd7d06c..4e598229 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/ObjectExplorerService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/ObjectExplorer/ObjectExplorerService.cs @@ -458,7 +458,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer ObjectExplorerSession session = null; connectionDetails.PersistSecurityInfo = true; ConnectParams connectParams = new ConnectParams() { OwnerUri = uri, Connection = connectionDetails, Type = Connection.ConnectionType.ObjectExplorer }; - string connectionDatabase = connectionDetails.DatabaseName; + bool isDefaultOrSystemDatabase = DatabaseUtils.IsSystemDatabaseConnection(connectionDetails.DatabaseName) || string.IsNullOrWhiteSpace(connectionDetails.DatabaseDisplayName); ConnectionInfo connectionInfo; ConnectionCompleteParams connectionResult = await Connect(connectParams, uri); @@ -480,7 +480,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer waitForLockTimeout: timeout, bindOperation: (bindingContext, cancelToken) => { - session = ObjectExplorerSession.CreateSession(connectionResult, serviceProvider, bindingContext.ServerConnection, connectionDatabase); + session = ObjectExplorerSession.CreateSession(connectionResult, serviceProvider, bindingContext.ServerConnection, isDefaultOrSystemDatabase); session.ConnectionInfo = connectionInfo; sessionMap.AddOrUpdate(uri, session, (key, oldSession) => session); @@ -729,11 +729,11 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer public string ErrorMessage { get; set; } - public static ObjectExplorerSession CreateSession(ConnectionCompleteParams response, IMultiServiceProvider serviceProvider, ServerConnection serverConnection, string connectionDatabase) + public static ObjectExplorerSession CreateSession(ConnectionCompleteParams response, IMultiServiceProvider serviceProvider, ServerConnection serverConnection, bool isDefaultOrSystemDatabase) { ServerNode rootNode = new ServerNode(response, serviceProvider, serverConnection); var session = new ObjectExplorerSession(response.OwnerUri, rootNode, serviceProvider, serviceProvider.GetService()); - if (!DatabaseUtils.IsSystemDatabaseConnection(connectionDatabase)) + if (!isDefaultOrSystemDatabase) { // Assuming the databases are in a folder under server node DatabaseTreeNode databaseNode = new DatabaseTreeNode(rootNode, response.ConnectionSummary.DatabaseName); diff --git a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestConnectionProfileService.cs b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestConnectionProfileService.cs index 0a38f0e7..cd6f8b44 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestConnectionProfileService.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.Test.Common/TestConnectionProfileService.cs @@ -182,6 +182,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Test.Common connectParams.Connection = new ConnectionDetails(); connectParams.Connection.ServerName = connectionProfile.ServerName; connectParams.Connection.DatabaseName = connectionProfile.Database; + connectParams.Connection.DatabaseDisplayName = connectionProfile.Database; connectParams.Connection.UserName = connectionProfile.User; connectParams.Connection.Password = connectionProfile.Password; connectParams.Connection.MaxPoolSize = 200; @@ -189,6 +190,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Test.Common if (!string.IsNullOrEmpty(databaseName)) { connectParams.Connection.DatabaseName = databaseName; + connectParams.Connection.DatabaseDisplayName = databaseName; } if (key == DefaultSqlAzureInstanceKey || key == DefaultSqlAzureV12InstanceKey) { diff --git a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/ObjectExplorer/ObjectExplorerServiceTests.cs b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/ObjectExplorer/ObjectExplorerServiceTests.cs index 05d2442e..722e74c1 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.UnitTests/ObjectExplorer/ObjectExplorerServiceTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.UnitTests/ObjectExplorer/ObjectExplorerServiceTests.cs @@ -133,6 +133,21 @@ namespace Microsoft.SqlTools.ServiceLayer.UnitTests.ObjectExplorer await CreateSessionRequestAndVerifyServerNodeHelper(details); } + [Fact] + public async Task CreateSessionRequestWithDefaultConnectionReturnsServerSuccessAndNodeInfo() + { + // Given the connection service fails to connect + ConnectionDetails details = new ConnectionDetails() + { + UserName = "user", + Password = "password", + DatabaseName = "testdb", + ServerName = "serverName", + DatabaseDisplayName = "" + }; + await CreateSessionRequestAndVerifyServerNodeHelper(details); + } + [Fact] public async Task ExpandNodeGivenValidSessionShouldReturnTheNodeChildren() {