Serialize Connection String (#680)

* add string serialization

* add unadded file

* changed code to be testable, added test

* moved test to correct location

* change to send undefined rather than error if the serialization fails

* update request name
This commit is contained in:
Anthony Dresser
2018-08-16 13:10:14 -07:00
committed by GitHub
parent df3c312984
commit 3c0a282333
3 changed files with 102 additions and 0 deletions

View File

@@ -952,6 +952,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection
serviceHost.SetRequestHandler(ListDatabasesRequest.Type, HandleListDatabasesRequest);
serviceHost.SetRequestHandler(ChangeDatabaseRequest.Type, HandleChangeDatabaseRequest);
serviceHost.SetRequestHandler(GetConnectionStringRequest.Type, HandleGetConnectionStringRequest);
serviceHost.SetRequestHandler(BuildConnectionInfoRequest.Type, HandleBuildConnectionInfoRequest);
}
/// <summary>
@@ -1288,6 +1289,64 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection
});
}
/// <summary>
/// Handles a request to serialize a connection string
/// </summary>
public async Task HandleBuildConnectionInfoRequest(
string connectionString,
RequestContext<ConnectionDetails> requestContext)
{
await Task.Run(async () =>
{
try
{
await requestContext.SendResult(ParseConnectionString(connectionString));
}
catch (Exception e)
{
// If theres an error in the parse, it means we just can't parse, so we return undefined
// rather than an error.
await requestContext.SendResult(null);
}
});
}
public ConnectionDetails ParseConnectionString(string connectionString)
{
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(connectionString);
ConnectionDetails details = new ConnectionDetails()
{
ApplicationIntent = builder.ApplicationIntent.ToString(),
ApplicationName = builder.ApplicationName,
AttachDbFilename = builder.AttachDBFilename,
AuthenticationType = builder.IntegratedSecurity ? "Integrated" : "SqlLogin",
ConnectRetryCount = builder.ConnectRetryCount,
ConnectRetryInterval = builder.ConnectRetryInterval,
ConnectTimeout = builder.ConnectTimeout,
CurrentLanguage = builder.CurrentLanguage,
DatabaseName = builder.InitialCatalog,
Encrypt = builder.Encrypt,
FailoverPartner = builder.FailoverPartner,
LoadBalanceTimeout = builder.LoadBalanceTimeout,
MaxPoolSize = builder.MaxPoolSize,
MinPoolSize = builder.MinPoolSize,
MultipleActiveResultSets = builder.MultipleActiveResultSets,
MultiSubnetFailover = builder.MultiSubnetFailover,
PacketSize = builder.PacketSize,
Password = !builder.IntegratedSecurity ? builder.Password : string.Empty,
PersistSecurityInfo = builder.PersistSecurityInfo,
Pooling = builder.Pooling,
Replication = builder.Replication,
ServerName = builder.DataSource,
TrustServerCertificate = builder.TrustServerCertificate,
TypeSystemVersion = builder.TypeSystemVersion,
UserName = builder.UserID,
WorkstationId = builder.WorkstationID,
};
return details;
}
/// <summary>
/// Handles a request to change the database for a connection
/// </summary>