func (ts *TripleStore) RemoveTriple(t *graph.Triple) { _, err := ts.db.Get(ts.createKeyFor("s", "p", "o", t), ts.readopts) if err != nil && err != leveldb.ErrNotFound { glog.Errorf("Couldn't access DB to confirm deletion") return } if err == leveldb.ErrNotFound { // No such triple in the database, forget about it. return } batch := &leveldb.Batch{} batch.Delete(ts.createKeyFor("s", "p", "o", t)) batch.Delete(ts.createKeyFor("o", "s", "p", t)) batch.Delete(ts.createKeyFor("p", "o", "s", t)) ts.UpdateValueKeyBy(t.Get("s"), -1, batch) ts.UpdateValueKeyBy(t.Get("p"), -1, batch) ts.UpdateValueKeyBy(t.Get("o"), -1, batch) if t.Get("c") != "" { batch.Delete(ts.createProvKeyFor("p", "s", "o", t)) ts.UpdateValueKeyBy(t.Get("c"), -1, batch) } err = ts.db.Write(batch, nil) if err != nil { glog.Errorf("Couldn't delete triple %s", t.ToString()) return } ts.size-- }
func (ts *TripleStore) AddTriple(t *graph.Triple) { batch := &leveldb.Batch{} ts.buildWrite(batch, t) err := ts.db.Write(batch, ts.writeopts) if err != nil { glog.Errorf("Couldn't write to DB for triple %s", t.ToString()) return } ts.size++ }
func (ts *TripleStore) buildTripleWrite(batch *leveldb.Batch, t *graph.Triple) { bytes, err := json.Marshal(*t) if err != nil { glog.Errorf("Couldn't write to buffer for triple %s\n %s\n", t.ToString(), err) return } batch.Put(ts.createKeyFor("s", "p", "o", t), bytes) batch.Put(ts.createKeyFor("o", "s", "p", t), bytes) batch.Put(ts.createKeyFor("p", "o", "s", t), bytes) if t.Get("c") != "" { batch.Put(ts.createProvKeyFor("p", "s", "o", t), bytes) } }