mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-19 09:35:36 -05:00
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:
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user