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
}