using System.Collections.Generic;
using System.Data;
namespace Microsoft.Kusto.ServiceLayer.DataSource
{
internal class KustoResultsReader : DataReaderWrapper
{
private DataSet _resultDataSet;
///
/// Kusto returns atleast 4 results tables - QueryResults(sometimes more than one), QueryProperties, QueryStatus and Query Results Metadata Table.
/// ADS just needs query results. When returning query results we need to trim off the last 3 tables.
///
public KustoResultsReader(IDataReader[] readers)
: base()
{
// Read out all tables
List results = new List();
foreach (var reader in readers)
{
while (!(reader?.IsClosed ?? true))
{
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();
for(int i = 0; i < results.Count; i++)
{
results[i].TableName = "Table_" + i;
_resultDataSet.Tables.Add(results[i]);
}
SetDataReader(_resultDataSet.CreateDataReader());
}
}
}