mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-01-13 17:23:02 -05:00
Fix schema level search and refactor search code for user management (#2084)
This commit is contained in:
@@ -12,6 +12,8 @@ using Microsoft.SqlTools.ServiceLayer.ObjectManagement.Contracts;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Concurrent;
|
||||
using Microsoft.SqlTools.ServiceLayer.Management;
|
||||
using System.Linq;
|
||||
using Microsoft.SqlTools.ServiceLayer.ObjectManagement.PermissionsData;
|
||||
|
||||
namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
||||
{
|
||||
@@ -131,6 +133,7 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
||||
CDataContainer dataContainer = CDataContainer.CreateDataContainer(connInfo, databaseExists: true);
|
||||
|
||||
List<SearchResultItem> res = new List<SearchResultItem>();
|
||||
var schemaTypes = SecurableUtils.GetSchemaTypes(dataContainer.Server).Select(Securable.GetSearchableObjectType).ToHashSet();
|
||||
|
||||
foreach (string type in requestParams.ObjectTypes)
|
||||
{
|
||||
@@ -142,31 +145,44 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
||||
continue;
|
||||
}
|
||||
|
||||
// only schema-Scoped securableTypes support schema level search
|
||||
if (!string.IsNullOrEmpty(requestParams.Schema) && !schemaTypes.Contains(searchableObjectType))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
SearchableObjectTypeDescription desc = SearchableObjectTypeDescription.GetDescription(searchableObjectType);
|
||||
|
||||
if (requestParams.SearchText != null)
|
||||
if (desc.IsDatabaseObject)
|
||||
{
|
||||
if (desc.IsDatabaseObject)
|
||||
if (!string.IsNullOrEmpty(requestParams.Schema))
|
||||
{
|
||||
SearchableObject.Search(result, searchableObjectType, dataContainer.ConnectionInfo, context.Parameters.Database, requestParams.SearchText, false, true);
|
||||
SearchableObject.Search(result, searchableObjectType, dataContainer.ConnectionInfo, context.Parameters.Database, requestParams.SearchText ?? string.Empty, false, requestParams.Schema, true, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!string.IsNullOrEmpty(requestParams.SearchText))
|
||||
{
|
||||
SearchableObject.Search(result, searchableObjectType, dataContainer.ConnectionInfo, context.Parameters.Database, requestParams.SearchText, false, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
SearchableObject.Search(result, searchableObjectType, dataContainer.ConnectionInfo, context.Parameters.Database, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// server object
|
||||
if (string.IsNullOrEmpty(requestParams.SearchText))
|
||||
{
|
||||
SearchableObject.Search(result, searchableObjectType, dataContainer.ConnectionInfo, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
SearchableObject.Search(result, searchableObjectType, dataContainer.ConnectionInfo, requestParams.SearchText, false, true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (desc.IsDatabaseObject)
|
||||
{
|
||||
SearchableObject.Search(result, searchableObjectType, dataContainer.ConnectionInfo, context.Parameters.Database, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
SearchableObject.Search(result, searchableObjectType, dataContainer.ConnectionInfo, true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
foreach (SearchableObject obj in result)
|
||||
{
|
||||
|
||||
@@ -582,5 +582,20 @@ namespace Microsoft.SqlTools.ServiceLayer.ObjectManagement
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The list of Schema-Scoped SecurableTypes
|
||||
/// </summary>
|
||||
internal static IEnumerable<SecurableType> GetSchemaTypes(Server server)
|
||||
{
|
||||
return Enum.GetValues(typeof(SecurableType))
|
||||
.Cast<SecurableType>()
|
||||
.Where(
|
||||
t =>
|
||||
t.IsValidSchemaBoundSecurable(
|
||||
new ServerVersion(server.ServerVersion.Major, server.ServerVersion.Minor, server.ServerVersion.BuildNumber),
|
||||
server.DatabaseEngineEdition,
|
||||
server.DatabaseEngineType));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user