adapt KindAll too
This commit is contained in:
@@ -121,15 +121,38 @@ func matchStatement(statement Statement, node ipld.Node) bool {
|
|||||||
}
|
}
|
||||||
case KindAll:
|
case KindAll:
|
||||||
if s, ok := statement.(quantifier); ok {
|
if s, ok := statement.(quantifier); ok {
|
||||||
_, many, err := s.selector.Select(node)
|
one, many, err := s.selector.Select(node)
|
||||||
if err != nil || len(many) == 0 {
|
if err != nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, n := range many {
|
if one != nil {
|
||||||
ok := matchStatement(s.statement, n)
|
it := one.ListIterator()
|
||||||
if !ok {
|
if it != nil {
|
||||||
return false
|
for !it.Done() {
|
||||||
|
_, v, err := it.Next()
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
ok := matchStatement(s.statement, v)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ok := matchStatement(s.statement, one)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(many) > 0 {
|
||||||
|
for _, n := range many {
|
||||||
|
ok := matchStatement(s.statement, n)
|
||||||
|
if !ok {
|
||||||
|
return false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user