in azkustodata/query/v2/iterative_dataset.go [133:191]
func readDataSet(d *iterativeDataset) error {
var err error
// The first frame should be a DataSetHeader. We don't need to save it - just validate it.
if header, _, err := nextFrame(d); err == nil {
if err = validateDataSetHeader(header); err != nil {
return err
}
} else {
return err
}
// Next up, we expect the QueryProperties table, which is a DataTable.
// We save it and send it after the primary results.
if decoder, frameType, err := nextFrame(d); err == nil {
if frameType != DataTableFrameType {
return errors.ES(errors.OpQuery, errors.KInternal, "unexpected frame type %s, expected DataTable", frameType)
}
if err = handleDataTable(d, decoder); err != nil {
return err
}
} else {
return err
}
// We then iterate over the primary tables.
// If we get a TableHeader, we read the table.
// If we get a DataTable, it means we have reached QueryCompletionInformation
// If we get a DataSetCompletion, we are done.
for decoder, frameType, err := nextFrame(d); err == nil; decoder, frameType, err = nextFrame(d) {
if frameType == DataTableFrameType {
if err = handleDataTable(d, decoder); err != nil {
return err
}
continue
}
if frameType == TableHeaderFrameType {
if err = readPrimaryTable(d, decoder); err != nil {
return err
}
continue
}
if frameType == DataSetCompletionFrameType {
err = readDataSetCompletion(decoder)
if err != nil {
return err
}
return nil
}
return errors.ES(errors.OpQuery, errors.KInternal, "unexpected frame type %s, expected DataTable, TableHeader, or DataSetCompletion", frameType)
}
return err
}