// // Copyright (c) Microsoft. All Rights Reserved. // using System; using System.Collections.Generic; using System.Threading; using System.Data; using System.Threading.Tasks; using Microsoft.Kusto.ServiceLayer.Utility; using Microsoft.Kusto.ServiceLayer.DataSource.DataSourceIntellisense; using Microsoft.Kusto.ServiceLayer.DataSource.Metadata; using Microsoft.Kusto.ServiceLayer.LanguageServices; using Microsoft.Kusto.ServiceLayer.LanguageServices.Contracts; using Microsoft.Kusto.ServiceLayer.Workspace.Contracts; using Microsoft.Kusto.ServiceLayer.LanguageServices.Completion; namespace Microsoft.Kusto.ServiceLayer.DataSource { /// public abstract class DataSourceBase : IDataSource { protected Object dataSourceLock = new Object(); private string _database; #region IDisposable /// /// Finalizes an instance of the class. /// ~DataSourceBase() { Dispose(false); } /// /// Disposes resources. /// public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } /// /// Disposes resources. /// /// true if disposing; false if finalizing. protected virtual void Dispose(bool disposing) { } #endregion #region IDataSource /// public abstract Task ExecuteQueryAsync(string query, CancellationToken cancellationToken, string databaseName = null); /// public async Task ExecuteScalarQueryAsync(string query, CancellationToken cancellationToken, string databaseName = null) { ValidationUtils.IsArgumentNotNullOrWhiteSpace(query, nameof(query)); using (var records = await ExecuteQueryAsync(query, cancellationToken, databaseName)) { return records.ToScalar(); } } public abstract Task> ExecuteControlCommandAsync(string command, bool throwOnError, CancellationToken cancellationToken); /// public abstract DiagnosticsInfo GetDiagnostics(DataSourceObjectMetadata parentMetadata); /// public abstract IEnumerable GetChildObjects(DataSourceObjectMetadata parentMetadata, bool includeSizeDetails = false); /// public abstract void Refresh(); /// public abstract void Refresh(DataSourceObjectMetadata objectMetadata); /// public abstract void UpdateDatabase(string databaseName); /// public abstract CompletionItem[] GetAutoCompleteSuggestions(ScriptDocumentInfo queryText, Position index, bool throwOnError = false); /// public abstract Hover GetHoverHelp(ScriptDocumentInfo scriptDocumentInfo, Position textPosition, bool throwOnError = false); /// public abstract DefinitionResult GetDefinition(string queryText, int index, int startLine, int startColumn, bool throwOnError = false); /// public abstract ScriptFileMarker[] GetSemanticMarkers(ScriptParseInfo parseInfo, ScriptFile scriptFile, string queryText); /// public abstract Task Exists(); /// public abstract bool Exists(DataSourceObjectMetadata objectMetadata); public abstract string GenerateAlterFunctionScript(string functionName); public abstract string GenerateExecuteFunctionScript(string functionName); /// public DataSourceType DataSourceType { get; protected set; } /// public string ClusterName { get; protected set; } /// public string DatabaseName { get { return _database; } set { lock(dataSourceLock) { _database = value; } } } #endregion } }