MCPcopy
hub / github.com/google/mangle / GetFacts

Method GetFacts

factstore/simplecolumn.go:115–162  ·  view source on GitHub ↗

GetFacts implements a ReadOnlyFactStore method.

(query ast.Atom, cb func(ast.Atom) error)

Source from the content-addressed store, hash-verified

113
114// GetFacts implements a ReadOnlyFactStore method.
115func (s *SimpleColumnStore) GetFacts(query ast.Atom, cb func(ast.Atom) error) error {
116 pred := query.Predicate
117 numFacts := 0
118 toSkip := 1 + len(s.predicates)
119 for i, p := range s.predicates {
120 if p == pred {
121 if p.Arity == 0 { // Special case 0-arity predicates, we are done.
122 if s.predicateFactCount[i] > 0 {
123 cb(ast.Atom{pred, nil})
124 }
125 return nil
126 }
127 numFacts = s.predicateFactCount[i]
128 if numFacts == 0 {
129 return nil // Special case empty set of facts.
130 }
131 break
132 }
133 if p.Arity == 0 {
134 continue
135 }
136 toSkip += s.predicateFactCount[i] * p.Arity
137 }
138
139 f, inputErr := s.input()
140 if inputErr != nil {
141 return ErrCouldNotRead
142 }
143 defer f.Close()
144
145 scanner := bufio.NewScanner(f)
146 for i := 0; i < toSkip; i++ {
147 if ok := scanner.Scan(); !ok {
148 return ErrCouldNotRead
149 }
150 }
151
152 var sc SimpleColumn
153 if err := sc.readPred(scanner, pred, numFacts, query.Args, func(args []ast.BaseTerm) error {
154 if err := cb(ast.Atom{pred, args}); err != nil {
155 return err
156 }
157 return nil
158 }); err != nil {
159 return err
160 }
161 return nil
162}
163
164var (
165 // ErrCouldNotRead is returned when the input file could not be read.

Callers 2

ContainsMethod · 0.95
TestStoreFunction · 0.95

Calls 1

readPredMethod · 0.95

Tested by 1

TestStoreFunction · 0.76