private IEnumerable <IEntityQuad> RemoveTriple(IEntityQuad entityTriple) { if (_entityQuads.Remove(entityTriple) && entityTriple.Object.IsBlank) { DecrementRefCount(entityTriple.Object); } yield return(entityTriple); }
public bool Remove(IEntityQuad entityTriple) { var entity = GetEntityId(entityTriple.EntityId); EntityQuads(entityTriple.EntityId).Remove(entityTriple.GetHashCode()); EntityQuads(entity).Remove(entityTriple.GetHashCode()); SubjectQuads(entityTriple.Subject).Remove(entityTriple.GetHashCode()); SubjectPredicateQuads(entityTriple.Subject, entityTriple.Predicate).Remove(entityTriple); return(_quads.Remove(entityTriple.GetHashCode())); }
public void Add(IEntityQuad quad) { var entity = GetEntityId(quad.EntityId); _quads[quad.GetHashCode()] = quad; EntityQuads(entity)[quad.GetHashCode()] = quad; EntityQuads(quad.EntityId)[quad.GetHashCode()] = quad; SubjectQuads(quad.Subject)[quad.GetHashCode()] = quad; SubjectPredicateQuads(quad.Subject, quad.Predicate)[quad] = quad; ObjectIndex(quad.Object)[quad.EntityId.GetHashCode()] = quad.EntityId; }
private void PrepareLists(IEntityQuad list, IEnumerable <IEntityQuad> quads, bool useNativeTypes) { var localSubject = list.Subject; int anotherPropertyInList = quads.Count(q => q.Subject.Equals(localSubject) && !q.Predicate.Equals(RdfType)); var firstValues = quads.Where(q => (q.Subject.Equals(localSubject) && q.Predicate.Equals(RdfFirst))).Select(q => q.Object); var firstValue = firstValues.First(); var restValue = list.Object; _listInGraph.AddFirst(ReturnListProperties(firstValue, useNativeTypes)); _nodesInList.Add(localSubject); IEnumerable <IEntityQuad> quad = quads.Where(q => (q.Subject.IsBlank && q.Predicate.Equals(RdfRest) && q.Object.Equals(localSubject))); if (anotherPropertyInList > 2 || firstValues.Count() > 1) { if (_listInGraph.Count() > 1) { _listInGraph.First.Remove(); _nodesInList = _nodesInList.Where(n => !n.Equals(localSubject)).ToList(); } _listInGraph.AddFirst(restValue.ToString()); } else if (quad.Count() == 1) { PrepareLists(quad.First(), quads, useNativeTypes); } else { IEnumerable <IEntityQuad> firstQuad = quads.Where(q => (q.Subject.IsBlank && q.Predicate.Equals(RdfFirst) && q.Object.Equals(localSubject))); if (firstQuad.Count() == 1) { _listInGraph.First.Remove(); _nodesInList = _nodesInList.Where(n => !n.Equals(localSubject)).ToList(); _listInGraph.AddFirst((restValue.IsBlank && firstValue.IsBlank) ? localSubject.ToString() : restValue.ToString()); } else { _listInGraph.AddFirst(localSubject.ToString()); } } }
int IComparable <IEntityQuad> .CompareTo(IEntityQuad other) { return(((IComparable)this).CompareTo(other)); }
// TODO: Make the GraphEquals method a bit less rigid. private bool GraphEquals(IEntityQuad triple, Uri graph) { return((triple.Graph != null) && ((triple.Graph.Uri.AbsoluteUri == graph.AbsoluteUri) || ((triple.Subject.IsBlank) && (graph.AbsoluteUri.EndsWith(triple.Graph.Uri.AbsoluteUri))))); }
public bool Contains(IEntityQuad item) { return(_quads.ContainsKey(item.GetHashCode())); }