func NewDataset()

in azkustodata/query/v1/dataset.go [65:130]


func NewDataset(ctx context.Context, op errors.Op, v1 V1) (Dataset, error) {
	d := &dataset{
		BaseDataset: query.NewBaseDataset(ctx, op, PrimaryResultKind),
	}

	if len(v1.Tables) == 0 {
		return nil, errors.ES(d.Op(), errors.KInternal, "kusto query failed: no tables returned")
	}

	// Special case - if there is only one table, it is the primary result
	if len(v1.Tables) == 1 {
		if v1.Exceptions != nil {
			return nil, errors.ES(d.Op(), errors.KInternal, "exceptions: %v", v1.Exceptions)
		}

		table, err := NewTable(d, &v1.Tables[0], primaryResultIndexRow)
		if err != nil {
			return nil, err
		}

		d.results = append(d.results, table)

		return d, err
	}

	// index is always the last table
	lastTable := &v1.Tables[len(v1.Tables)-1]

	index, err := parseTable[TableIndexRow](lastTable, d, nil)
	if err != nil {
		return nil, err
	}

	d.index = index

	for i, r := range index {
		if r.Kind == "QueryStatus" {
			queryStatus, err := parseTable[QueryStatus](&v1.Tables[i], d, &r)
			if err != nil {
				return nil, err
			}
			d.status = queryStatus
		} else if r.Kind == "QueryProperties" {
			queryInfo, err := parseTable[QueryProperties](&v1.Tables[i], d, &r)
			if err != nil {
				return nil, err
			}
			d.info = queryInfo
		} else if r.Kind == "QueryResult" {
			table, err := NewTable(d, &v1.Tables[i], &r)
			if err != nil {
				return nil, err
			}

			d.results = append(d.results, table)
		}
	}

	err = nil

	if v1.Exceptions != nil {
		err = errors.ES(d.Op(), errors.KInternal, "exceptions: %v", v1.Exceptions)
	}

	return d, err
}