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