...

Source file src/oss.terrastruct.com/d2/d2ir/query.go

Documentation: oss.terrastruct.com/d2/d2ir

     1  package d2ir
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"oss.terrastruct.com/d2/d2parser"
     7  )
     8  
     9  // QueryAll is only for tests and debugging.
    10  func (m *Map) QueryAll(idStr string) (na []Node, _ error) {
    11  	k, err := d2parser.ParseMapKey(idStr)
    12  	if err != nil {
    13  		return nil, err
    14  	}
    15  
    16  	if k.Key != nil {
    17  		fa, err := m.EnsureField(k.Key, nil, false, nil)
    18  		if err != nil {
    19  			return nil, err
    20  		}
    21  		if len(fa) == 0 {
    22  			return nil, nil
    23  		}
    24  		for _, f := range fa {
    25  			if len(k.Edges) == 0 {
    26  				na = append(na, f)
    27  				return na, nil
    28  			}
    29  			m = f.Map()
    30  			if m == nil {
    31  				return nil, nil
    32  			}
    33  		}
    34  	}
    35  
    36  	eida := NewEdgeIDs(k)
    37  
    38  	for i, eid := range eida {
    39  		refctx := &RefContext{
    40  			Key:      k,
    41  			ScopeMap: m,
    42  			Edge:     k.Edges[i],
    43  		}
    44  		ea := m.GetEdges(eid, refctx, nil)
    45  		for _, e := range ea {
    46  			if k.EdgeKey == nil {
    47  				na = append(na, e)
    48  			} else if e.Map_ != nil {
    49  				f := e.Map_.GetField(k.EdgeKey.IDA()...)
    50  				if f != nil {
    51  					na = append(na, f)
    52  				}
    53  			}
    54  		}
    55  	}
    56  	return na, nil
    57  }
    58  
    59  // Query is only for tests and debugging.
    60  func (m *Map) Query(idStr string) (Node, error) {
    61  	na, err := m.QueryAll(idStr)
    62  	if err != nil {
    63  		return nil, err
    64  	}
    65  
    66  	if len(na) == 0 {
    67  		return nil, nil
    68  	}
    69  	if len(na) > 1 {
    70  		return nil, fmt.Errorf("expected only one query result but got: %#v", na)
    71  	}
    72  	return na[0], nil
    73  }
    74  

View as plain text