//
// 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;
}
}
}
}