func readDataSet()

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
}