// // Copyright (c) Microsoft. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. // #nullable disable using System; using System.Collections.Generic; using System.Data; using Microsoft.SqlServer.Management.Smo; using Microsoft.SqlTools.Extensibility; namespace Microsoft.SqlTools.ServiceLayer.ObjectExplorer.SmoModel { /// /// A handles SMO queries for one or more SMO object types. /// The property defines which types can be queried. /// /// To query multiple /// public abstract class SmoQuerier : IComposableService { public abstract Type[] SupportedObjectTypes { get; } private static object lockObject = new object(); /// /// Queries SMO for a collection of objects using the /// /// /// public abstract IEnumerable Query(SmoQueryContext context, string filter, bool refresh, IEnumerable extraProperties); internal IMultiServiceProvider ServiceProvider { get; private set; } public void SetServiceProvider(IMultiServiceProvider provider) { ServiceProvider = provider; } /// /// Convert the data to data reader is possible /// protected IDataReader GetDataReader(object data) { IDataReader reader = null; if (data is IDataReader) { reader = data as IDataReader; } else if(data is DataTable) { reader = ((DataTable)data).CreateDataReader(); } else if (data is DataSet) { reader = ((DataSet)data).Tables[0].CreateDataReader(); } return reader; } /// /// Mthod used to do custom filtering on smo objects if cannot be implemented using the filters /// protected virtual bool PassesFinalFilters(SqlSmoObject parent, SqlSmoObject smoObject) { return true; } /// /// Returns true if the querier is valid for the given server version /// /// /// public bool IsValidFor(ValidForFlag serverValidFor) { return ServerVersionHelper.IsValidFor(serverValidFor, ValidFor); } /// /// Indicates which platforms the querier is valid for /// public virtual ValidForFlag ValidFor { get { return ValidForFlag.All; } } } }