ParseMutationObject tries to consolidate fields of the api.Mutation into the corresponding field of the returned dql.Mutation. For example, the 3 fields, api.Mutation#SetJson, api.Mutation#SetNquads and api.Mutation#Set are consolidated into the dql.Mutation.Set field. Similarly the 3 fields api.Mut
(ctx context.Context, mu *api.Mutation)
| 2207 | // dql.Mutation.Set field. Similarly the 3 fields api.Mutation#DeleteJson, api.Mutation#DelNquads |
| 2208 | // and api.Mutation#Del are merged into the dql.Mutation#Del field. |
| 2209 | func ParseMutationObject(ctx context.Context, mu *api.Mutation) (*dql.Mutation, error) { |
| 2210 | res := &dql.Mutation{Cond: mu.Cond} |
| 2211 | |
| 2212 | if len(mu.SetJson) > 0 { |
| 2213 | nqs, md, err := chunker.ParseJSON(mu.SetJson, chunker.SetNquads) |
| 2214 | if err != nil { |
| 2215 | return nil, err |
| 2216 | } |
| 2217 | res.Set = append(res.Set, nqs...) |
| 2218 | res.Metadata = md |
| 2219 | } |
| 2220 | if len(mu.DeleteJson) > 0 { |
| 2221 | // The metadata is not currently needed for delete operations so it can be safely ignored. |
| 2222 | nqs, _, err := chunker.ParseJSON(mu.DeleteJson, chunker.DeleteNquads) |
| 2223 | if err != nil { |
| 2224 | return nil, err |
| 2225 | } |
| 2226 | res.Del = append(res.Del, nqs...) |
| 2227 | } |
| 2228 | if len(mu.SetNquads) > 0 { |
| 2229 | nqs, md, err := chunker.ParseRDFs(mu.SetNquads) |
| 2230 | if err != nil { |
| 2231 | return nil, err |
| 2232 | } |
| 2233 | res.Set = append(res.Set, nqs...) |
| 2234 | res.Metadata = md |
| 2235 | } |
| 2236 | if len(mu.DelNquads) > 0 { |
| 2237 | nqs, _, err := chunker.ParseRDFs(mu.DelNquads) |
| 2238 | if err != nil { |
| 2239 | return nil, err |
| 2240 | } |
| 2241 | res.Del = append(res.Del, nqs...) |
| 2242 | } |
| 2243 | |
| 2244 | res.Set = append(res.Set, mu.Set...) |
| 2245 | res.Del = append(res.Del, mu.Del...) |
| 2246 | // parse facets and convert to the binary format so that |
| 2247 | // a field of type datetime like "2017-01-01" can be correctly encoded in the |
| 2248 | // marshaled binary format as done in the time.Marshal method |
| 2249 | if err := validateAndConvertFacets(res.Set); err != nil { |
| 2250 | return nil, err |
| 2251 | } |
| 2252 | |
| 2253 | if err := validateNQuads(res.Set, res.Del, newReservedPredicateGuard(ctx)); err != nil { |
| 2254 | return nil, err |
| 2255 | } |
| 2256 | return res, nil |
| 2257 | } |
| 2258 | |
| 2259 | func validateAndConvertFacets(nquads []*api.NQuad) error { |
| 2260 | for _, m := range nquads { |
no test coverage detected