mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-02-16 18:47:57 -05:00
Fix for queries with comments separated by new lines (#1101)
* Fix for queries with comments separated by new lines * Mimic Kusto behaviour for comments ran as query * extra check * address comment Co-authored-by: Monica Gupta <mogupt@microsoft.com>
This commit is contained in:
@@ -146,10 +146,7 @@ namespace Microsoft.Kusto.ServiceLayer.DataSource
|
|||||||
return kcsb;
|
return kcsb;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IDataReader ExecuteQuery(string query, CancellationToken cancellationToken, string databaseName = null, int retryCount = 1)
|
private ClientRequestProperties GetCLientRequestProperties(CancellationToken cancellationToken){
|
||||||
{
|
|
||||||
ValidationUtils.IsArgumentNotNullOrWhiteSpace(query, nameof(query));
|
|
||||||
|
|
||||||
var clientRequestProperties = new ClientRequestProperties
|
var clientRequestProperties = new ClientRequestProperties
|
||||||
{
|
{
|
||||||
ClientRequestId = Guid.NewGuid().ToString()
|
ClientRequestId = Guid.NewGuid().ToString()
|
||||||
@@ -157,33 +154,54 @@ namespace Microsoft.Kusto.ServiceLayer.DataSource
|
|||||||
clientRequestProperties.SetOption(ClientRequestProperties.OptionNoTruncation, true);
|
clientRequestProperties.SetOption(ClientRequestProperties.OptionNoTruncation, true);
|
||||||
cancellationToken.Register(() => CancelQuery(clientRequestProperties.ClientRequestId));
|
cancellationToken.Register(() => CancelQuery(clientRequestProperties.ClientRequestId));
|
||||||
|
|
||||||
|
return clientRequestProperties;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IDataReader ExecuteQuery(string query, CancellationToken cancellationToken, string databaseName = null, int retryCount = 1)
|
||||||
|
{
|
||||||
|
ValidationUtils.IsArgumentNotNullOrWhiteSpace(query, nameof(query));
|
||||||
|
|
||||||
var script = CodeScript.From(query, GlobalState.Default);
|
var script = CodeScript.From(query, GlobalState.Default);
|
||||||
IDataReader[] origReaders = new IDataReader[script.Blocks.Count];
|
IDataReader[] origReaders = new IDataReader[script.Blocks.Count];
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
var numOfQueries = 0;
|
||||||
Parallel.ForEach(script.Blocks, (codeBlock, state, index) =>
|
Parallel.ForEach(script.Blocks, (codeBlock, state, index) =>
|
||||||
{
|
{
|
||||||
var minimalQuery =
|
var minimalQuery =
|
||||||
codeBlock.Service.GetMinimalText(MinimalTextKind.RemoveLeadingWhitespaceAndComments);
|
codeBlock.Service.GetMinimalText(MinimalTextKind.RemoveLeadingWhitespaceAndComments);
|
||||||
|
|
||||||
IDataReader origReader;
|
if(!string.IsNullOrEmpty(minimalQuery)){ // Query is empty in case of comments
|
||||||
|
IDataReader origReader;
|
||||||
|
var clientRequestProperties = GetCLientRequestProperties(cancellationToken);
|
||||||
|
|
||||||
if(minimalQuery.StartsWith(".") && !minimalQuery.StartsWith(".show")){
|
if(minimalQuery.StartsWith(".") && !minimalQuery.StartsWith(".show")){
|
||||||
origReader = _kustoAdminProvider.ExecuteControlCommand(
|
origReader = _kustoAdminProvider.ExecuteControlCommand(
|
||||||
KustoQueryUtils.IsClusterLevelQuery(minimalQuery) ? "" : databaseName,
|
KustoQueryUtils.IsClusterLevelQuery(minimalQuery) ? "" : databaseName,
|
||||||
minimalQuery,
|
minimalQuery,
|
||||||
clientRequestProperties);
|
clientRequestProperties);
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
origReader = _kustoQueryProvider.ExecuteQuery(
|
origReader = _kustoQueryProvider.ExecuteQuery(
|
||||||
KustoQueryUtils.IsClusterLevelQuery(minimalQuery) ? "" : databaseName,
|
KustoQueryUtils.IsClusterLevelQuery(minimalQuery) ? "" : databaseName,
|
||||||
minimalQuery,
|
minimalQuery,
|
||||||
clientRequestProperties);
|
clientRequestProperties);
|
||||||
}
|
}
|
||||||
|
|
||||||
origReaders[index] = origReader;
|
origReaders[index] = origReader;
|
||||||
|
numOfQueries++;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (numOfQueries == 0 && origReaders.Length > 0) // Covers the scenario when user tries to run comments.
|
||||||
|
{
|
||||||
|
var clientRequestProperties = GetCLientRequestProperties(cancellationToken);
|
||||||
|
origReaders[0] = _kustoQueryProvider.ExecuteQuery(
|
||||||
|
KustoQueryUtils.IsClusterLevelQuery(query) ? "" : databaseName,
|
||||||
|
query,
|
||||||
|
clientRequestProperties);
|
||||||
|
}
|
||||||
|
|
||||||
return new KustoResultsReader(origReaders);
|
return new KustoResultsReader(origReaders);
|
||||||
}
|
}
|
||||||
catch (AggregateException exception)
|
catch (AggregateException exception)
|
||||||
|
|||||||
Reference in New Issue
Block a user