package d2ir
import (
"fmt"
"oss.terrastruct.com/d2/d2parser"
)
func (m *Map ) QueryAll (idStr string ) (na []Node , _ error ) {
k , err := d2parser .ParseMapKey (idStr )
if err != nil {
return nil , err
}
if k .Key != nil {
fa , err := m .EnsureField (k .Key , nil , false , nil )
if err != nil {
return nil , err
}
if len (fa ) == 0 {
return nil , nil
}
for _ , f := range fa {
if len (k .Edges ) == 0 {
na = append (na , f )
return na , nil
}
m = f .Map ()
if m == nil {
return nil , nil
}
}
}
eida := NewEdgeIDs (k )
for i , eid := range eida {
refctx := &RefContext {
Key : k ,
ScopeMap : m ,
Edge : k .Edges [i ],
}
ea := m .GetEdges (eid , refctx , nil )
for _ , e := range ea {
if k .EdgeKey == nil {
na = append (na , e )
} else if e .Map_ != nil {
f := e .Map_ .GetField (k .EdgeKey .IDA ()...)
if f != nil {
na = append (na , f )
}
}
}
}
return na , nil
}
func (m *Map ) Query (idStr string ) (Node , error ) {
na , err := m .QueryAll (idStr )
if err != nil {
return nil , err
}
if len (na ) == 0 {
return nil , nil
}
if len (na ) > 1 {
return nil , fmt .Errorf ("expected only one query result but got: %#v" , na )
}
return na [0 ], nil
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .