ToDirectedEdges converts the dql.Mutation input into a set of directed edges.
(gmuList []*dql.Mutation, newUids map[string]uint64)
| 211 | |
| 212 | // ToDirectedEdges converts the dql.Mutation input into a set of directed edges. |
| 213 | func ToDirectedEdges(gmuList []*dql.Mutation, newUids map[string]uint64) ( |
| 214 | edges []*pb.DirectedEdge, err error) { |
| 215 | |
| 216 | // Wrapper for a pointer to protos.Nquad |
| 217 | var wnq *dql.NQuad |
| 218 | |
| 219 | parse := func(nq *api.NQuad, op pb.DirectedEdge_Op) error { |
| 220 | wnq = &dql.NQuad{NQuad: nq} |
| 221 | if len(nq.Subject) == 0 { |
| 222 | return nil |
| 223 | } |
| 224 | // Get edge from nquad using newUids. |
| 225 | var edge *pb.DirectedEdge |
| 226 | edge, err = wnq.ToEdgeUsing(newUids) |
| 227 | if err != nil { |
| 228 | return errors.Wrap(err, "") |
| 229 | } |
| 230 | edge.Op = op |
| 231 | edges = append(edges, edge) |
| 232 | return nil |
| 233 | } |
| 234 | |
| 235 | for _, gmu := range gmuList { |
| 236 | // We delete first and then we set. Order of the mutation is important. |
| 237 | for _, nq := range gmu.Del { |
| 238 | if nq.Subject == x.Star && nq.ObjectValue.GetDefaultVal() == x.Star { |
| 239 | return edges, errors.New("Predicate deletion should be called via alter") |
| 240 | } |
| 241 | if err := parse(nq, pb.DirectedEdge_DEL); err != nil { |
| 242 | return edges, err |
| 243 | } |
| 244 | if gmu.AllowedPreds != nil { |
| 245 | for _, e := range edges { |
| 246 | e.AllowedPreds = gmu.AllowedPreds |
| 247 | } |
| 248 | } |
| 249 | } |
| 250 | for _, nq := range gmu.Set { |
| 251 | if err := facets.SortAndValidate(nq.Facets); err != nil { |
| 252 | return edges, err |
| 253 | } |
| 254 | if err := parse(nq, pb.DirectedEdge_SET); err != nil { |
| 255 | return edges, err |
| 256 | } |
| 257 | } |
| 258 | } |
| 259 | |
| 260 | return edges, nil |
| 261 | } |
| 262 | |
| 263 | func checkIfDeletingAclOperation(ctx context.Context, edges []*pb.DirectedEdge) error { |
| 264 | // Don't need to make any checks if ACL is not enabled |
no test coverage detected