mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-02-16 10:58:30 -05:00
Remove redundant usage of object URNs in database handler (#2245)
This commit is contained in:
@@ -11,10 +11,6 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement.Contracts
|
|||||||
{
|
{
|
||||||
public class DetachDatabaseRequestParams : GeneralRequestDetails
|
public class DetachDatabaseRequestParams : GeneralRequestDetails
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// SFC (SMO) URN identifying the object
|
|
||||||
/// </summary>
|
|
||||||
public string ObjectUrn { get; set; }
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The target database name.
|
/// The target database name.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -11,10 +11,6 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement.Contracts
|
|||||||
{
|
{
|
||||||
public class DropDatabaseRequestParams : GeneralRequestDetails
|
public class DropDatabaseRequestParams : GeneralRequestDetails
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// SFC (SMO) URN identifying the object
|
|
||||||
/// </summary>
|
|
||||||
public string ObjectUrn { get; set; }
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The target database name.
|
/// The target database name.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -11,10 +11,6 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement.Contracts
|
|||||||
{
|
{
|
||||||
public class PurgeQueryStoreDataRequestParams : GeneralRequestDetails
|
public class PurgeQueryStoreDataRequestParams : GeneralRequestDetails
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// SFC (SMO) URN identifying the object
|
|
||||||
/// </summary>
|
|
||||||
public string ObjectUrn { get; set; }
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The target database name.
|
/// The target database name.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ using System.Collections.Specialized;
|
|||||||
using Microsoft.SqlTools.SqlCore.Utility;
|
using Microsoft.SqlTools.SqlCore.Utility;
|
||||||
using System.Collections.Concurrent;
|
using System.Collections.Concurrent;
|
||||||
using Microsoft.Data.SqlClient;
|
using Microsoft.Data.SqlClient;
|
||||||
|
using Microsoft.SqlServer.Management.Sdk.Sfc;
|
||||||
|
|
||||||
namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
||||||
{
|
{
|
||||||
@@ -196,7 +197,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
|||||||
public override Task<InitializeViewResult> InitializeObjectView(InitializeViewRequestParams requestParams)
|
public override Task<InitializeViewResult> InitializeObjectView(InitializeViewRequestParams requestParams)
|
||||||
{
|
{
|
||||||
// create a default data context and database object
|
// create a default data context and database object
|
||||||
using (var dataContainer = CreateDatabaseDataContainer(requestParams.ConnectionUri, requestParams.ObjectUrn, requestParams.IsNewObject, requestParams.Database))
|
using (var dataContainer = CreateDatabaseDataContainer(requestParams.ConnectionUri, requestParams.IsNewObject, requestParams.Database))
|
||||||
{
|
{
|
||||||
if (dataContainer.Server == null)
|
if (dataContainer.Server == null)
|
||||||
{
|
{
|
||||||
@@ -418,7 +419,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
|||||||
public string Detach(DetachDatabaseRequestParams detachParams)
|
public string Detach(DetachDatabaseRequestParams detachParams)
|
||||||
{
|
{
|
||||||
var sqlScript = string.Empty;
|
var sqlScript = string.Empty;
|
||||||
using (var dataContainer = CreateDatabaseDataContainer(detachParams.ConnectionUri, detachParams.ObjectUrn, false, detachParams.Database))
|
using (var dataContainer = CreateDatabaseDataContainer(detachParams.ConnectionUri, false, detachParams.Database))
|
||||||
{
|
{
|
||||||
var smoDatabase = dataContainer.SqlDialogSubject as Database;
|
var smoDatabase = dataContainer.SqlDialogSubject as Database;
|
||||||
if (smoDatabase != null)
|
if (smoDatabase != null)
|
||||||
@@ -465,7 +466,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException($"Provided URN '{detachParams.ObjectUrn}' did not correspond to an existing database.");
|
throw new InvalidOperationException($"Could not find database '{detachParams.Database}'.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return sqlScript;
|
return sqlScript;
|
||||||
@@ -496,7 +497,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
|||||||
{
|
{
|
||||||
var sqlScript = string.Empty;
|
var sqlScript = string.Empty;
|
||||||
ConnectionInfo connectionInfo = this.GetConnectionInfo(attachParams.ConnectionUri);
|
ConnectionInfo connectionInfo = this.GetConnectionInfo(attachParams.ConnectionUri);
|
||||||
using (var dataContainer = CreateDatabaseDataContainer(attachParams.ConnectionUri, null, true, null))
|
using (var dataContainer = CreateDatabaseDataContainer(attachParams.ConnectionUri, true, string.Empty))
|
||||||
{
|
{
|
||||||
var server = dataContainer.Server!;
|
var server = dataContainer.Server!;
|
||||||
var originalExecuteMode = server.ConnectionContext.SqlExecutionModes;
|
var originalExecuteMode = server.ConnectionContext.SqlExecutionModes;
|
||||||
@@ -552,7 +553,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
|||||||
public string Drop(DropDatabaseRequestParams dropParams)
|
public string Drop(DropDatabaseRequestParams dropParams)
|
||||||
{
|
{
|
||||||
var sqlScript = string.Empty;
|
var sqlScript = string.Empty;
|
||||||
using (var dataContainer = CreateDatabaseDataContainer(dropParams.ConnectionUri, dropParams.ObjectUrn, false, dropParams.Database))
|
using (var dataContainer = CreateDatabaseDataContainer(dropParams.ConnectionUri, false, dropParams.Database))
|
||||||
{
|
{
|
||||||
var smoDatabase = dataContainer.SqlDialogSubject as Database;
|
var smoDatabase = dataContainer.SqlDialogSubject as Database;
|
||||||
if (smoDatabase != null)
|
if (smoDatabase != null)
|
||||||
@@ -624,7 +625,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException($"Provided URN '{dropParams.ObjectUrn}' did not correspond to an existing database.");
|
throw new InvalidOperationException($"Could not find database '{dropParams.Database}'.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return sqlScript;
|
return sqlScript;
|
||||||
@@ -636,7 +637,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
|||||||
/// <param name="purgeParams"></param>
|
/// <param name="purgeParams"></param>
|
||||||
public void PurgeQueryStoreData(PurgeQueryStoreDataRequestParams purgeParams)
|
public void PurgeQueryStoreData(PurgeQueryStoreDataRequestParams purgeParams)
|
||||||
{
|
{
|
||||||
using (var dataContainer = CreateDatabaseDataContainer(purgeParams.ConnectionUri, purgeParams.ObjectUrn, false, purgeParams.Database))
|
using (var dataContainer = CreateDatabaseDataContainer(purgeParams.ConnectionUri, false, purgeParams.Database))
|
||||||
{
|
{
|
||||||
var smoDatabase = dataContainer.SqlDialogSubject as Database;
|
var smoDatabase = dataContainer.SqlDialogSubject as Database;
|
||||||
if (smoDatabase != null)
|
if (smoDatabase != null)
|
||||||
@@ -646,25 +647,28 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private CDataContainer CreateDatabaseDataContainer(string connectionUri, string? objectURN, bool isNewDatabase, string? databaseName)
|
private CDataContainer CreateDatabaseDataContainer(string connectionUri, bool isNewDatabase, string databaseName)
|
||||||
{
|
{
|
||||||
ConnectionInfo connectionInfo = this.GetConnectionInfo(connectionUri);
|
ConnectionInfo connectionInfo = this.GetConnectionInfo(connectionUri);
|
||||||
var originalDatabaseName = connectionInfo.ConnectionDetails.DatabaseName;
|
var originalDatabaseName = connectionInfo.ConnectionDetails.DatabaseName;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
string objectURN;
|
||||||
if (!isNewDatabase && !string.IsNullOrEmpty(databaseName))
|
if (!isNewDatabase && !string.IsNullOrEmpty(databaseName))
|
||||||
{
|
{
|
||||||
connectionInfo.ConnectionDetails.DatabaseName = databaseName;
|
connectionInfo.ConnectionDetails.DatabaseName = databaseName;
|
||||||
|
objectURN = string.Format(System.Globalization.CultureInfo.InvariantCulture, "Server/Database[@Name='{0}']", Urn.EscapeString(databaseName));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
objectURN = "Server";
|
||||||
}
|
}
|
||||||
CDataContainer dataContainer = CDataContainer.CreateDataContainer(connectionInfo, databaseExists: !isNewDatabase);
|
CDataContainer dataContainer = CDataContainer.CreateDataContainer(connectionInfo, databaseExists: !isNewDatabase);
|
||||||
if (dataContainer.Server == null)
|
if (dataContainer.Server == null)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException(serverNotExistsError);
|
throw new InvalidOperationException(serverNotExistsError);
|
||||||
}
|
}
|
||||||
if (string.IsNullOrEmpty(objectURN))
|
|
||||||
{
|
|
||||||
objectURN = string.Format(System.Globalization.CultureInfo.InvariantCulture, "Server");
|
|
||||||
}
|
|
||||||
dataContainer.SqlDialogSubject = dataContainer.Server.GetSmoObject(objectURN);
|
dataContainer.SqlDialogSubject = dataContainer.Server.GetSmoObject(objectURN);
|
||||||
return dataContainer;
|
return dataContainer;
|
||||||
}
|
}
|
||||||
@@ -681,7 +685,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
|||||||
throw new ArgumentException("Database name not provided.");
|
throw new ArgumentException("Database name not provided.");
|
||||||
}
|
}
|
||||||
|
|
||||||
using (var dataContainer = CreateDatabaseDataContainer(viewParams.ConnectionUri, viewParams.ObjectUrn, viewParams.IsNewObject, viewParams.Database))
|
using (var dataContainer = CreateDatabaseDataContainer(viewParams.ConnectionUri, viewParams.IsNewObject, viewParams.Database))
|
||||||
{
|
{
|
||||||
if (dataContainer.Server == null)
|
if (dataContainer.Server == null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -65,11 +65,11 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectManagement
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
// create and update
|
// create and update
|
||||||
var parametersForCreation = ObjectManagementTestUtils.GetInitializeViewRequestParams(connectionResult.ConnectionInfo.OwnerUri, "master", true, SqlObjectType.Database, "", "");
|
var parametersForCreation = ObjectManagementTestUtils.GetInitializeViewRequestParams(connectionResult.ConnectionInfo.OwnerUri, testDatabase.Name, true, SqlObjectType.Database, "", "");
|
||||||
await ObjectManagementTestUtils.SaveObject(parametersForCreation, testDatabase);
|
await ObjectManagementTestUtils.SaveObject(parametersForCreation, testDatabase);
|
||||||
Assert.That(DatabaseExists(testDatabase.Name!, server), $"Expected database '{testDatabase.Name}' was not created succesfully");
|
Assert.That(DatabaseExists(testDatabase.Name!, server), $"Expected database '{testDatabase.Name}' was not created succesfully");
|
||||||
|
|
||||||
var parametersForUpdate = ObjectManagementTestUtils.GetInitializeViewRequestParams(connectionResult.ConnectionInfo.OwnerUri, "master", false, SqlObjectType.Database, "", objUrn);
|
var parametersForUpdate = ObjectManagementTestUtils.GetInitializeViewRequestParams(connectionResult.ConnectionInfo.OwnerUri, testDatabase.Name, false, SqlObjectType.Database, "", objUrn);
|
||||||
await ObjectManagementTestUtils.SaveObject(parametersForUpdate, testDatabase);
|
await ObjectManagementTestUtils.SaveObject(parametersForUpdate, testDatabase);
|
||||||
|
|
||||||
// cleanup
|
// cleanup
|
||||||
@@ -532,7 +532,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectManagement
|
|||||||
var detachParams = new DetachDatabaseRequestParams()
|
var detachParams = new DetachDatabaseRequestParams()
|
||||||
{
|
{
|
||||||
ConnectionUri = connectionUri,
|
ConnectionUri = connectionUri,
|
||||||
ObjectUrn = objUrn,
|
Database = testDatabase.Name,
|
||||||
DropConnections = true,
|
DropConnections = true,
|
||||||
UpdateStatistics = true,
|
UpdateStatistics = true,
|
||||||
GenerateScript = false
|
GenerateScript = false
|
||||||
@@ -596,7 +596,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectManagement
|
|||||||
var detachParams = new DetachDatabaseRequestParams()
|
var detachParams = new DetachDatabaseRequestParams()
|
||||||
{
|
{
|
||||||
ConnectionUri = connectionUri,
|
ConnectionUri = connectionUri,
|
||||||
ObjectUrn = objUrn,
|
Database = testDatabase.Name,
|
||||||
DropConnections = false,
|
DropConnections = false,
|
||||||
UpdateStatistics = false,
|
UpdateStatistics = false,
|
||||||
GenerateScript = true
|
GenerateScript = true
|
||||||
@@ -759,7 +759,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectManagement
|
|||||||
var deleteParams = new DropDatabaseRequestParams()
|
var deleteParams = new DropDatabaseRequestParams()
|
||||||
{
|
{
|
||||||
ConnectionUri = connectionUri,
|
ConnectionUri = connectionUri,
|
||||||
ObjectUrn = objUrn,
|
Database = testDatabase.Name,
|
||||||
DropConnections = false,
|
DropConnections = false,
|
||||||
DeleteBackupHistory = false,
|
DeleteBackupHistory = false,
|
||||||
GenerateScript = false
|
GenerateScript = false
|
||||||
@@ -802,7 +802,7 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectManagement
|
|||||||
var deleteParams = new DropDatabaseRequestParams()
|
var deleteParams = new DropDatabaseRequestParams()
|
||||||
{
|
{
|
||||||
ConnectionUri = connectionUri,
|
ConnectionUri = connectionUri,
|
||||||
ObjectUrn = objUrn,
|
Database = testDatabase.Name,
|
||||||
DropConnections = false,
|
DropConnections = false,
|
||||||
DeleteBackupHistory = false,
|
DeleteBackupHistory = false,
|
||||||
GenerateScript = true
|
GenerateScript = true
|
||||||
@@ -863,7 +863,10 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.ObjectManagement
|
|||||||
{
|
{
|
||||||
if (db.Name == databaseName)
|
if (db.Name == databaseName)
|
||||||
{
|
{
|
||||||
db.DropIfExists();
|
// Set database to single user mode to close any active connections
|
||||||
|
db.DatabaseOptions.UserAccess = SqlServer.Management.Smo.DatabaseUserAccess.Single;
|
||||||
|
db.Alter(TerminationClause.RollbackTransactionsImmediately);
|
||||||
|
db.Drop();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user