mirror of
https://github.com/ckaczor/sqltoolsservice.git
synced 2026-02-01 17:24:42 -05:00
Result handling for Kusto results (#1079)
* Revert "Fix for displaying multiple table (#1075)"
This reverts commit df0be31019.
* KustoResultsReader trims results
This commit is contained in:
@@ -8,8 +8,18 @@ namespace Microsoft.Kusto.ServiceLayer.DataSource
|
||||
{
|
||||
public class DataReaderWrapper : IDataReader
|
||||
{
|
||||
private readonly IDataReader _inner ;
|
||||
public DataReaderWrapper(IDataReader inner)
|
||||
private IDataReader _inner ;
|
||||
|
||||
protected DataReaderWrapper()
|
||||
{
|
||||
}
|
||||
|
||||
protected DataReaderWrapper(IDataReader inner)
|
||||
{
|
||||
SetDataReader(inner);
|
||||
}
|
||||
|
||||
protected void SetDataReader(IDataReader inner)
|
||||
{
|
||||
_inner = inner;
|
||||
}
|
||||
|
||||
@@ -1,27 +1,39 @@
|
||||
using Microsoft.Kusto.ServiceLayer.QueryExecution;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
|
||||
namespace Microsoft.Kusto.ServiceLayer.DataSource
|
||||
{
|
||||
internal class KustoResultsReader : DataReaderWrapper
|
||||
{
|
||||
public KustoResultsReader(IDataReader reader)
|
||||
: base(reader)
|
||||
{
|
||||
}
|
||||
private DataSet _resultDataSet;
|
||||
|
||||
/// <summary>
|
||||
/// Kusto returns atleast 4 results tables - QueryResults(sometimes more than one), QueryProperties, QueryStatus and Query Results Metadata Table.
|
||||
/// When returning query results we need to trim off the last 3 tables as we want the caller to only read results table.
|
||||
/// ADS just needs query results. When returning query results we need to trim off the last 3 tables.
|
||||
/// </summary>
|
||||
|
||||
public void SanitizeResults(List<ResultSet> resultSets)
|
||||
public KustoResultsReader(IDataReader reader)
|
||||
: base()
|
||||
{
|
||||
if (resultSets.Count > 3)
|
||||
// Read out all tables
|
||||
List<DataTable> results = new List<DataTable>();
|
||||
while (!(reader?.IsClosed ?? true))
|
||||
{
|
||||
resultSets.RemoveRange(resultSets.Count - 3, 3);
|
||||
DataTable dt = new DataTable();
|
||||
dt.Load(reader); // This calls NextResult on the reader
|
||||
results.Add(dt);
|
||||
}
|
||||
|
||||
// Trim results
|
||||
if(results.Count > 3) results.RemoveRange(results.Count - 3, 3);
|
||||
|
||||
// Create a DataReader for the trimmed set
|
||||
_resultDataSet = new DataSet();
|
||||
foreach(var result in results)
|
||||
{
|
||||
_resultDataSet.Tables.Add(result);
|
||||
}
|
||||
|
||||
SetDataReader(_resultDataSet.CreateDataReader());
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user