diff --git a/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminService.cs b/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminService.cs index 6c93b982..e634ac0d 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminService.cs @@ -73,6 +73,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin serviceHost.SetRequestHandler(CreateDatabaseRequest.Type, HandleCreateDatabaseRequest); serviceHost.SetRequestHandler(CreateLoginRequest.Type, HandleCreateLoginRequest); serviceHost.SetRequestHandler(DefaultDatabaseInfoRequest.Type, HandleDefaultDatabaseInfoRequest); + serviceHost.SetRequestHandler(GetDatabaseInfoRequest.Type, HandleGetDatabaseInfoRequest); } /// @@ -131,6 +132,29 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin }); } + /// + /// Handle get database info request + /// + internal static async Task HandleGetDatabaseInfoRequest( + GetDatabaseInfoParams databaseParams, + RequestContext requestContext) + { + ConnectionInfo connInfo; + AdminService.ConnectionServiceInstance.TryFindConnection( + databaseParams.OwnerUri, + out connInfo); + DatabaseInfo info = null; + + if (connInfo != null) + { + info = GetDatabaseInfo(connInfo); + } + + await requestContext.SendResult(new GetDatabaseInfoResponse(){ + Result = info + }); + } + /// /// Return database info for a specific database /// diff --git a/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminServicesProviderOptionsHelper.cs b/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminServicesProviderOptionsHelper.cs index f059fc18..b1a973cd 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminServicesProviderOptionsHelper.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminServicesProviderOptionsHelper.cs @@ -31,6 +31,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin internal const string MaxDop = "maxDop"; internal const string DatabaseContainmentType = "databaseContainmentType"; internal const string DatabaseState = "databaseState"; + internal const string RecoveryModel = "recoveryModel"; internal const string FileGroupType = "fileGroupType"; internal const string IsDefault = "isDefault"; internal const string IsFileStream = "isFileStream"; @@ -195,6 +196,15 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin GroupName = "Other" }, new ServiceOption + { + Name = AdminServicesProviderOptionsHelper.RecoveryModel, + DisplayName = "RecoveryModel", + Description = "Recovery model", + ValueType = ServiceOption.ValueTypeString, + IsRequired = false, + GroupName = "Other" + }, + new ServiceOption { Name = AdminServicesProviderOptionsHelper.FileGroups, DisplayName = "File Groups", diff --git a/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/GetDatabaseInfoRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/GetDatabaseInfoRequest.cs new file mode 100644 index 00000000..da3c6d61 --- /dev/null +++ b/src/Microsoft.SqlTools.ServiceLayer/Admin/Contracts/GetDatabaseInfoRequest.cs @@ -0,0 +1,41 @@ +// +// Copyright (c) Microsoft. All rights reserved. +// Licensed under the MIT license. See LICENSE file in the project root for full license information. +// + +using Microsoft.SqlTools.Hosting.Protocol.Contracts; + +namespace Microsoft.SqlTools.ServiceLayer.Admin.Contracts +{ + /// + /// Params for a get database info request + /// + public class GetDatabaseInfoParams + { + /// + /// Uri identifier for the connection to get the database info for + /// + public string OwnerUri { get; set; } + } + + /// + /// Response object for get database info + /// + public class GetDatabaseInfoResponse + { + /// + /// The object containing the database info + /// + public DatabaseInfo Result { get; set; } + } + + /// + /// Get database info request mapping + /// + public class GetDatabaseInfoRequest + { + public static readonly + RequestType Type = + RequestType.Create("admin/getdatabaseinfo"); + } +} diff --git a/src/Microsoft.SqlTools.ServiceLayer/Admin/Database/DatabaseTaskHelper.cs b/src/Microsoft.SqlTools.ServiceLayer/Admin/Database/DatabaseTaskHelper.cs index 232f5b1b..4b559d58 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Admin/Database/DatabaseTaskHelper.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Admin/Database/DatabaseTaskHelper.cs @@ -105,6 +105,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin databaseInfo.Options.Add(AdminServicesProviderOptionsHelper.Owner, prototype.Owner); databaseInfo.Options.Add(AdminServicesProviderOptionsHelper.Collation, prototype.Collation); databaseInfo.Options.Add(AdminServicesProviderOptionsHelper.DatabaseState, prototype.DatabaseState.ToString()); + databaseInfo.Options.Add(AdminServicesProviderOptionsHelper.RecoveryModel, prototype.RecoveryModel.ToString()); databaseInfo.Options.Add(AdminServicesProviderOptionsHelper.IsSystemDB, prototype.IsSystemDB.ToString()); databaseInfo.Options.Add(AdminServicesProviderOptionsHelper.AnsiNulls, prototype.AnsiNulls.ToString()); diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/Admin/DatabaseAdminTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/Admin/DatabaseAdminTests.cs index 7c982afa..bad951a4 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/Admin/DatabaseAdminTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/Admin/DatabaseAdminTests.cs @@ -85,5 +85,25 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.AdminServices requestContext.VerifyAll(); } + /// + /// Get database info test + /// + [Fact] + public async void GetDatabaseInfoTest() + { + var results = GetLiveAutoCompleteTestObjects(); + var requestContext = new Mock>(); + requestContext.Setup(x => x.SendResult(It.IsAny())).Returns(Task.FromResult(new object())); + + var dbParams = new GetDatabaseInfoParams + { + OwnerUri = results.ConnectionInfo.OwnerUri + }; + + await AdminService.HandleGetDatabaseInfoRequest(dbParams, requestContext.Object); + + requestContext.VerifyAll(); + } + } }