Additional create db options (#342)

* Refactor unsafe block

* Stage changes

* Add additional database prototype metadata

* Fix nullref bug

* Read database info properties
This commit is contained in:
Karl Burtram
2017-05-11 09:44:57 -07:00
committed by GitHub
parent 8a54435a9c
commit c9e2963ca0
4 changed files with 326 additions and 34 deletions

View File

@@ -68,41 +68,49 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
serviceHost.SetRequestHandler(DefaultDatabaseInfoRequest.Type, HandleDefaultDatabaseInfoRequest);
}
public static async Task HandleDefaultDatabaseInfoRequest(
DefaultDatabaseInfoParams optionsParams,
RequestContext<DefaultDatabaseInfoResponse> requestContext)
private static DatabaseTaskHelper CreateDatabaseTaskHelper(ConnectionInfo connInfo)
{
var response = new DefaultDatabaseInfoResponse();
ConnectionInfo connInfo;
AdminService.ConnectionServiceInstance.TryFindConnection(
optionsParams.OwnerUri,
out connInfo);
XmlDocument xmlDoc = CreateDataContainerDocument(connInfo);
char[] passwordArray = connInfo.ConnectionDetails.Password.ToCharArray();
CDataContainer dataContainer;
unsafe
{
fixed (char* passwordPtr = passwordArray)
{
var dataContainer = new CDataContainer(
dataContainer = new CDataContainer(
CDataContainer.ServerType.SQL,
connInfo.ConnectionDetails.ServerName,
false,
connInfo.ConnectionDetails.UserName,
new System.Security.SecureString(passwordPtr, passwordArray.Length),
xmlDoc.InnerXml);
var taskHelper = new DatabaseTaskHelper();
taskHelper.CreateDatabase(dataContainer);
response.DefaultDatabaseInfo = DatabaseTaskHelper.DatabasePrototypeToDatabaseInfo(taskHelper.Prototype);
}
}
await requestContext.SendResult(response);
var taskHelper = new DatabaseTaskHelper();
taskHelper.CreateDatabase(dataContainer);
return taskHelper;
}
/// <summary>
/// Handle a request for the default database prototype info
/// </summary>
public static async Task HandleDefaultDatabaseInfoRequest(
DefaultDatabaseInfoParams optionsParams,
RequestContext<DefaultDatabaseInfoResponse> requestContext)
{
var response = new DefaultDatabaseInfoResponse();
ConnectionInfo connInfo;
AdminService.ConnectionServiceInstance.TryFindConnection(
optionsParams.OwnerUri,
out connInfo);
DatabaseTaskHelper taskHelper = CreateDatabaseTaskHelper(connInfo);
response.DefaultDatabaseInfo = DatabaseTaskHelper.DatabasePrototypeToDatabaseInfo(taskHelper.Prototype);
await requestContext.SendResult(response);
}
private static XmlDocument CreateDataContainerDocument(ConnectionInfo connInfo)
{
@@ -130,6 +138,17 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
CreateDatabaseParams databaseParams,
RequestContext<CreateDatabaseResponse> requestContext)
{
var response = new DefaultDatabaseInfoResponse();
ConnectionInfo connInfo;
AdminService.ConnectionServiceInstance.TryFindConnection(
databaseParams.OwnerUri,
out connInfo);
DatabaseTaskHelper taskHelper = CreateDatabaseTaskHelper(connInfo);
DatabaseTaskHelper.ApplyToPrototype(databaseParams.DatabaseInfo, taskHelper.Prototype);
response.DefaultDatabaseInfo = DatabaseTaskHelper.DatabasePrototypeToDatabaseInfo(taskHelper.Prototype);
await requestContext.SendResult(new CreateDatabaseResponse());
}