mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-02-16 18:47:57 -05:00
Fix nullref in backup from not providing SFC XML innerDoc (#364)
This commit is contained in:
@@ -148,7 +148,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
|
|||||||
/// <param name="connInfo">connection info</param>
|
/// <param name="connInfo">connection info</param>
|
||||||
/// <param name="databaseExists">flag indicating whether to create taskhelper for existing database or not</param>
|
/// <param name="databaseExists">flag indicating whether to create taskhelper for existing database or not</param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private static DatabaseTaskHelper CreateDatabaseTaskHelper(ConnectionInfo connInfo, bool databaseExists = false)
|
internal static DatabaseTaskHelper CreateDatabaseTaskHelper(ConnectionInfo connInfo, bool databaseExists = false)
|
||||||
{
|
{
|
||||||
XmlDocument xmlDoc = CreateDataContainerDocument(connInfo, databaseExists);
|
XmlDocument xmlDoc = CreateDataContainerDocument(connInfo, databaseExists);
|
||||||
char[] passwordArray = connInfo.ConnectionDetails.Password.ToCharArray();
|
char[] passwordArray = connInfo.ConnectionDetails.Password.ToCharArray();
|
||||||
|
|||||||
@@ -18,14 +18,14 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery
|
|||||||
{
|
{
|
||||||
private static readonly Lazy<DisasterRecoveryService> instance = new Lazy<DisasterRecoveryService>(() => new DisasterRecoveryService());
|
private static readonly Lazy<DisasterRecoveryService> instance = new Lazy<DisasterRecoveryService>(() => new DisasterRecoveryService());
|
||||||
private static ConnectionService connectionService = null;
|
private static ConnectionService connectionService = null;
|
||||||
private BackupUtilities backupFactory;
|
private BackupUtilities backupUtilities;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Default, parameterless constructor.
|
/// Default, parameterless constructor.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal DisasterRecoveryService()
|
internal DisasterRecoveryService()
|
||||||
{
|
{
|
||||||
this.backupFactory = new BackupUtilities();
|
this.backupUtilities = new BackupUtilities();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -78,12 +78,12 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery
|
|||||||
|
|
||||||
if (connInfo != null)
|
if (connInfo != null)
|
||||||
{
|
{
|
||||||
CDataContainer dataContainer = GetDataContainer(connInfo);
|
DatabaseTaskHelper helper = AdminService.CreateDatabaseTaskHelper(connInfo, databaseExists: true);
|
||||||
SqlConnection sqlConn = GetSqlConnection(connInfo);
|
SqlConnection sqlConn = GetSqlConnection(connInfo);
|
||||||
if (sqlConn != null)
|
if (sqlConn != null)
|
||||||
{
|
{
|
||||||
DisasterRecoveryService.Instance.InitializeBackup(dataContainer, sqlConn);
|
DisasterRecoveryService.Instance.InitializeBackup(helper.DataContainer, sqlConn);
|
||||||
BackupConfigInfo backupConfigInfo = DisasterRecoveryService.Instance.GetDatabaseInfo(sqlConn.Database);
|
BackupConfigInfo backupConfigInfo = DisasterRecoveryService.Instance.GetBackupConfigInfo(sqlConn.Database);
|
||||||
backupConfigInfo.DatabaseInfo = AdminService.GetDatabaseInfo(connInfo);
|
backupConfigInfo.DatabaseInfo = AdminService.GetDatabaseInfo(connInfo);
|
||||||
response.BackupConfigInfo = backupConfigInfo;
|
response.BackupConfigInfo = backupConfigInfo;
|
||||||
}
|
}
|
||||||
@@ -92,44 +92,6 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery
|
|||||||
await requestContext.SendResult(response);
|
await requestContext.SendResult(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static CDataContainer GetDataContainer(ConnectionInfo connInfo)
|
|
||||||
{
|
|
||||||
CDataContainer dataContainer = null;
|
|
||||||
|
|
||||||
if (connInfo != null)
|
|
||||||
{
|
|
||||||
char[] passwordArray = connInfo.ConnectionDetails.Password.ToCharArray();
|
|
||||||
if (string.Equals(connInfo.ConnectionDetails.AuthenticationType, "SqlLogin", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
unsafe
|
|
||||||
{
|
|
||||||
fixed (char* passwordPtr = passwordArray)
|
|
||||||
{
|
|
||||||
dataContainer = new CDataContainer(
|
|
||||||
CDataContainer.ServerType.SQL,
|
|
||||||
connInfo.ConnectionDetails.ServerName,
|
|
||||||
false,
|
|
||||||
connInfo.ConnectionDetails.UserName,
|
|
||||||
new System.Security.SecureString(passwordPtr, passwordArray.Length),
|
|
||||||
string.Empty);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
dataContainer = new CDataContainer(
|
|
||||||
CDataContainer.ServerType.SQL,
|
|
||||||
connInfo.ConnectionDetails.ServerName,
|
|
||||||
true,
|
|
||||||
null,
|
|
||||||
null,
|
|
||||||
null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return dataContainer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Handles a backup request
|
/// Handles a backup request
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -141,15 +103,14 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery
|
|||||||
DisasterRecoveryService.ConnectionServiceInstance.TryFindConnection(
|
DisasterRecoveryService.ConnectionServiceInstance.TryFindConnection(
|
||||||
backupParams.OwnerUri,
|
backupParams.OwnerUri,
|
||||||
out connInfo);
|
out connInfo);
|
||||||
CDataContainer dataContainer;
|
|
||||||
|
|
||||||
if (connInfo != null)
|
if (connInfo != null)
|
||||||
{
|
{
|
||||||
dataContainer = GetDataContainer(connInfo);
|
DatabaseTaskHelper helper = AdminService.CreateDatabaseTaskHelper(connInfo, databaseExists: true);
|
||||||
SqlConnection sqlConn = GetSqlConnection(connInfo);
|
SqlConnection sqlConn = GetSqlConnection(connInfo);
|
||||||
if (sqlConn != null)
|
if (sqlConn != null)
|
||||||
{
|
{
|
||||||
DisasterRecoveryService.Instance.InitializeBackup(dataContainer, sqlConn);
|
DisasterRecoveryService.Instance.InitializeBackup(helper.DataContainer, sqlConn);
|
||||||
DisasterRecoveryService.Instance.SetBackupInput(backupParams.BackupInfo);
|
DisasterRecoveryService.Instance.SetBackupInput(backupParams.BackupInfo);
|
||||||
DisasterRecoveryService.Instance.PerformBackup();
|
DisasterRecoveryService.Instance.PerformBackup();
|
||||||
}
|
}
|
||||||
@@ -186,22 +147,22 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery
|
|||||||
|
|
||||||
private void InitializeBackup(CDataContainer dataContainer, SqlConnection sqlConnection)
|
private void InitializeBackup(CDataContainer dataContainer, SqlConnection sqlConnection)
|
||||||
{
|
{
|
||||||
this.backupFactory.Initialize(dataContainer, sqlConnection);
|
this.backupUtilities.Initialize(dataContainer, sqlConnection);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetBackupInput(BackupInfo input)
|
private void SetBackupInput(BackupInfo input)
|
||||||
{
|
{
|
||||||
this.backupFactory.SetBackupInput(input);
|
this.backupUtilities.SetBackupInput(input);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void PerformBackup()
|
private void PerformBackup()
|
||||||
{
|
{
|
||||||
this.backupFactory.PerformBackup();
|
this.backupUtilities.PerformBackup();
|
||||||
}
|
}
|
||||||
|
|
||||||
private BackupConfigInfo GetDatabaseInfo(string databaseName)
|
private BackupConfigInfo GetBackupConfigInfo(string databaseName)
|
||||||
{
|
{
|
||||||
return this.backupFactory.GetBackupConfigInfo(databaseName);
|
return this.backupUtilities.GetBackupConfigInfo(databaseName);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user