...
1 package d2ir
2
3 import (
4 "fmt"
5
6 "oss.terrastruct.com/d2/d2parser"
7 )
8
9
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
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