diff --git a/grids/graph.go b/grids/graph.go index 9ba159c4..18d1ef85 100644 --- a/grids/graph.go +++ b/grids/graph.go @@ -60,7 +60,7 @@ func insertVertex(tx kvi.KVBulkWrite, keyMap *KeyMap, graphKey uint64, vertex *g if vertex.Gid == "" { return fmt.Errorf("Inserting null key vertex") } - vertexKey, _ := keyMap.GetsertVertexKey(vertex.Gid, vertex.Label) + vertexKey, _ := keyMap.GetsertVertexKey(graphKey, vertex.Gid, vertex.Label) key := VertexKey(graphKey, vertexKey) value, err := proto.Marshal(vertex.Data) if err != nil { @@ -88,12 +88,12 @@ func insertEdge(tx kvi.KVBulkWrite, keyMap *KeyMap, graphKey uint64, edge *gripq return fmt.Errorf("Inserting null key edge") } - eid, lid := keyMap.GetsertEdgeKey(edge.Gid, edge.Label) - src, ok := keyMap.GetVertexKey(edge.From) + eid, lid := keyMap.GetsertEdgeKey(graphKey, edge.Gid, edge.Label) + src, ok := keyMap.GetVertexKey(graphKey, edge.From) if !ok { return fmt.Errorf("Vertex %s not found") } - dst, ok := keyMap.GetVertexKey(edge.To) + dst, ok := keyMap.GetVertexKey(graphKey, edge.To) if !ok { return fmt.Errorf("Vertex %s not found") } @@ -240,7 +240,7 @@ func (ggraph *GridsGraph) BulkAdd(stream <-chan *gripql.GraphElement) error { // DelEdge deletes edge with id `key` func (ggraph *GridsGraph) DelEdge(eid string) error { - edgeKey, ok := ggraph.kdb.keyMap.GetEdgeKey(eid) + edgeKey, ok := ggraph.kdb.keyMap.GetEdgeKey(ggraph.graphKey, eid) if !ok { fmt.Printf("Edge not found") } @@ -271,15 +271,14 @@ func (ggraph *GridsGraph) DelEdge(eid string) error { if err := ggraph.kdb.graphkv.Delete(dkey); err != nil { return err } - ggraph.kdb.keyMap.DelEdgeKey(eid) - ggraph.kdb.keyMap.DelEdgeLabel(edgeKey) + ggraph.kdb.keyMap.DelEdgeKey(ggraph.graphKey, eid) ggraph.kdb.ts.Touch(ggraph.graphID) return nil } // DelVertex deletes vertex with id `key` func (ggraph *GridsGraph) DelVertex(id string) error { - vertexKey, ok := ggraph.kdb.keyMap.GetVertexKey(id) + vertexKey, ok := ggraph.kdb.keyMap.GetVertexKey(ggraph.graphKey, id) if !ok { return fmt.Errorf("Vertex %s not found", id) } @@ -307,8 +306,6 @@ func (ggraph *GridsGraph) DelVertex(id string) error { return nil }) - ggraph.kdb.keyMap.DelVertexLabel(vertexKey) - return ggraph.kdb.graphkv.Update(func(tx kvi.KVTransaction) error { if err := tx.Delete(vid); err != nil { return err @@ -338,10 +335,10 @@ func (ggraph *GridsGraph) GetEdgeList(ctx context.Context, loadProp bool) <-chan } keyValue := it.Key() _, ekey, skey, dkey, label := EdgeKeyParse(keyValue) - labelID := ggraph.kdb.keyMap.GetLabelID(label) - sid := ggraph.kdb.keyMap.GetVertexID(skey) - did := ggraph.kdb.keyMap.GetVertexID(dkey) - eid := ggraph.kdb.keyMap.GetEdgeID(ekey) + labelID := ggraph.kdb.keyMap.GetLabelID(ggraph.graphKey, label) + sid := ggraph.kdb.keyMap.GetVertexID(ggraph.graphKey, skey) + did := ggraph.kdb.keyMap.GetVertexID(ggraph.graphKey, dkey) + eid := ggraph.kdb.keyMap.GetEdgeID(ggraph.graphKey, ekey) e := &gripql.Edge{Gid: eid, Label: labelID, From: sid, To: did} if loadProp { edgeData, _ := it.Value() @@ -358,7 +355,7 @@ func (ggraph *GridsGraph) GetEdgeList(ctx context.Context, loadProp bool) <-chan // GetVertex loads a vertex given an id. It returns a nil if not found func (ggraph *GridsGraph) GetVertex(id string, loadProp bool) *gripql.Vertex { - key, ok := ggraph.kdb.keyMap.GetVertexKey(id) + key, ok := ggraph.kdb.keyMap.GetVertexKey(ggraph.graphKey, id) if !ok { return nil } @@ -366,8 +363,8 @@ func (ggraph *GridsGraph) GetVertex(id string, loadProp bool) *gripql.Vertex { var v *gripql.Vertex err := ggraph.kdb.graphkv.View(func(it kvi.KVIterator) error { - lKey := ggraph.kdb.keyMap.GetVertexLabel(key) - lId := ggraph.kdb.keyMap.GetLabelID(lKey) + lKey := ggraph.kdb.keyMap.GetVertexLabel(ggraph.graphKey, key) + lId := ggraph.kdb.keyMap.GetLabelID(ggraph.graphKey, lKey) v = &gripql.Vertex { Gid: id, Label: lId, @@ -402,7 +399,7 @@ func (ggraph *GridsGraph) GetVertexChannel(ids chan gdbi.ElementLookup, load boo defer close(data) ggraph.kdb.graphkv.View(func(it kvi.KVIterator) error { for id := range ids { - key, _ := ggraph.kdb.keyMap.GetVertexKey(id.ID) + key, _ := ggraph.kdb.keyMap.GetVertexKey(ggraph.graphKey, id.ID) ed := elementData{key: key, req: id} if load { vkey := VertexKey(ggraph.graphKey, key) @@ -421,8 +418,8 @@ func (ggraph *GridsGraph) GetVertexChannel(ids chan gdbi.ElementLookup, load boo go func() { defer close(out) for d := range data { - lKey := ggraph.kdb.keyMap.GetVertexLabel(d.key) - lId := ggraph.kdb.keyMap.GetLabelID(lKey) + lKey := ggraph.kdb.keyMap.GetVertexLabel(ggraph.graphKey, d.key) + lId := ggraph.kdb.keyMap.GetLabelID(ggraph.graphKey, lKey) v := gripql.Vertex{Gid:d.req.ID, Label:lId} if load { v.Data = protoutil.NewStruct() @@ -441,7 +438,7 @@ func (ggraph *GridsGraph) GetOutChannel(reqChan chan gdbi.ElementLookup, load bo vertexChan := make(chan elementData, 100) edgeLabelKeys := make([]uint64, 0, len(edgeLabels)) for i := range edgeLabels { - el, ok := ggraph.kdb.keyMap.GetLabelKey(edgeLabels[i]) + el, ok := ggraph.kdb.keyMap.GetLabelKey(ggraph.graphKey, edgeLabels[i]) if ok { edgeLabelKeys = append(edgeLabelKeys, el) } @@ -450,7 +447,7 @@ func (ggraph *GridsGraph) GetOutChannel(reqChan chan gdbi.ElementLookup, load bo defer close(vertexChan) ggraph.kdb.graphkv.View(func(it kvi.KVIterator) error { for req := range reqChan { - key, ok := ggraph.kdb.keyMap.GetVertexKey(req.ID) + key, ok := ggraph.kdb.keyMap.GetVertexKey(ggraph.graphKey, req.ID) if ok { skeyPrefix := SrcEdgePrefix(ggraph.graphKey, key) for it.Seek(skeyPrefix); it.Valid() && bytes.HasPrefix(it.Key(), skeyPrefix); it.Next() { @@ -476,9 +473,9 @@ func (ggraph *GridsGraph) GetOutChannel(reqChan chan gdbi.ElementLookup, load bo ggraph.kdb.graphkv.View(func(it kvi.KVIterator) error { for req := range vertexChan { _, vkey := VertexKeyParse(req.data) - gid := ggraph.kdb.keyMap.GetVertexID(vkey) - lkey := ggraph.kdb.keyMap.GetVertexLabel(vkey) - lid := ggraph.kdb.keyMap.GetLabelID(lkey) + gid := ggraph.kdb.keyMap.GetVertexID(ggraph.graphKey, vkey) + lkey := ggraph.kdb.keyMap.GetVertexLabel(ggraph.graphKey, vkey) + lid := ggraph.kdb.keyMap.GetLabelID(ggraph.graphKey, lkey) v := &gripql.Vertex{Gid: gid, Label:lid} if load { dataValue, err := it.Get(req.data) @@ -505,7 +502,7 @@ func (ggraph *GridsGraph) GetInChannel(reqChan chan gdbi.ElementLookup, load boo o := make(chan gdbi.ElementLookup, 100) edgeLabelKeys := make([]uint64, 0, len(edgeLabels)) for i := range edgeLabels { - el, ok := ggraph.kdb.keyMap.GetLabelKey(edgeLabels[i]) + el, ok := ggraph.kdb.keyMap.GetLabelKey(ggraph.graphKey, edgeLabels[i]) if ok { edgeLabelKeys = append(edgeLabelKeys, el) } @@ -514,7 +511,7 @@ func (ggraph *GridsGraph) GetInChannel(reqChan chan gdbi.ElementLookup, load boo defer close(o) ggraph.kdb.graphkv.View(func(it kvi.KVIterator) error { for req := range reqChan { - vkey, ok := ggraph.kdb.keyMap.GetVertexKey(req.ID) + vkey, ok := ggraph.kdb.keyMap.GetVertexKey(ggraph.graphKey, req.ID) if ok { dkeyPrefix := DstEdgePrefix(ggraph.graphKey, vkey) for it.Seek(dkeyPrefix); it.Valid() && bytes.HasPrefix(it.Key(), dkeyPrefix); it.Next() { @@ -522,9 +519,9 @@ func (ggraph *GridsGraph) GetInChannel(reqChan chan gdbi.ElementLookup, load boo _, _, src, _, label := DstEdgeKeyParse(keyValue) if len(edgeLabelKeys) == 0 || containsUint(edgeLabelKeys, label) { vkey := VertexKey(ggraph.graphKey, src) - srcID := ggraph.kdb.keyMap.GetVertexID(src) - lId := ggraph.kdb.keyMap.GetVertexLabel(src) - lKey := ggraph.kdb.keyMap.GetLabelID(lId) + srcID := ggraph.kdb.keyMap.GetVertexID(ggraph.graphKey, src) + lId := ggraph.kdb.keyMap.GetVertexLabel(ggraph.graphKey, src) + lKey := ggraph.kdb.keyMap.GetLabelID(ggraph.graphKey, lId) v := &gripql.Vertex{Gid: srcID, Label:lKey} if load { dataValue, err := it.Get(vkey) @@ -554,7 +551,7 @@ func (ggraph *GridsGraph) GetOutEdgeChannel(reqChan chan gdbi.ElementLookup, loa o := make(chan gdbi.ElementLookup, 100) edgeLabelKeys := make([]uint64, 0, len(edgeLabels)) for i := range edgeLabels { - el, ok := ggraph.kdb.keyMap.GetLabelKey(edgeLabels[i]) + el, ok := ggraph.kdb.keyMap.GetLabelKey(ggraph.graphKey, edgeLabels[i]) if ok { edgeLabelKeys = append(edgeLabelKeys, el) } @@ -563,7 +560,7 @@ func (ggraph *GridsGraph) GetOutEdgeChannel(reqChan chan gdbi.ElementLookup, loa defer close(o) ggraph.kdb.graphkv.View(func(it kvi.KVIterator) error { for req := range reqChan { - vkey, ok := ggraph.kdb.keyMap.GetVertexKey(req.ID) + vkey, ok := ggraph.kdb.keyMap.GetVertexKey(ggraph.graphKey, req.ID) if ok { skeyPrefix := SrcEdgePrefix(ggraph.graphKey, vkey) for it.Seek(skeyPrefix); it.Valid() && bytes.HasPrefix(it.Key(), skeyPrefix); it.Next() { @@ -571,10 +568,10 @@ func (ggraph *GridsGraph) GetOutEdgeChannel(reqChan chan gdbi.ElementLookup, loa _, eid, src, dst, label := SrcEdgeKeyParse(keyValue) if len(edgeLabelKeys) == 0 || containsUint(edgeLabelKeys, label) { e := gripql.Edge{} - e.Gid = ggraph.kdb.keyMap.GetEdgeID(eid) - e.From = ggraph.kdb.keyMap.GetVertexID(src) - e.To = ggraph.kdb.keyMap.GetVertexID(dst) - e.Label = ggraph.kdb.keyMap.GetLabelID(label) + e.Gid = ggraph.kdb.keyMap.GetEdgeID(ggraph.graphKey, eid) + e.From = ggraph.kdb.keyMap.GetVertexID(ggraph.graphKey, src) + e.To = ggraph.kdb.keyMap.GetVertexID(ggraph.graphKey, dst) + e.Label = ggraph.kdb.keyMap.GetLabelID(ggraph.graphKey, label) if load { ekey := EdgeKey(ggraph.graphKey, eid, src, dst, label) dataValue, err := it.Get(ekey) @@ -601,7 +598,7 @@ func (ggraph *GridsGraph) GetInEdgeChannel(reqChan chan gdbi.ElementLookup, load o := make(chan gdbi.ElementLookup, 100) edgeLabelKeys := make([]uint64, 0, len(edgeLabels)) for i := range edgeLabels { - el, ok := ggraph.kdb.keyMap.GetLabelKey(edgeLabels[i]) + el, ok := ggraph.kdb.keyMap.GetLabelKey(ggraph.graphKey, edgeLabels[i]) if ok { edgeLabelKeys = append(edgeLabelKeys, el) } @@ -610,7 +607,7 @@ func (ggraph *GridsGraph) GetInEdgeChannel(reqChan chan gdbi.ElementLookup, load defer close(o) ggraph.kdb.graphkv.View(func(it kvi.KVIterator) error { for req := range reqChan { - vkey, ok := ggraph.kdb.keyMap.GetVertexKey(req.ID) + vkey, ok := ggraph.kdb.keyMap.GetVertexKey(ggraph.graphKey, req.ID) if ok { dkeyPrefix := DstEdgePrefix(ggraph.graphKey, vkey) for it.Seek(dkeyPrefix); it.Valid() && bytes.HasPrefix(it.Key(), dkeyPrefix); it.Next() { @@ -618,10 +615,10 @@ func (ggraph *GridsGraph) GetInEdgeChannel(reqChan chan gdbi.ElementLookup, load _, eid, src, dst, label := DstEdgeKeyParse(keyValue) if len(edgeLabelKeys) == 0 || containsUint(edgeLabelKeys, label) { e := gripql.Edge{} - e.Gid = ggraph.kdb.keyMap.GetEdgeID(eid) - e.From = ggraph.kdb.keyMap.GetVertexID(src) - e.To = ggraph.kdb.keyMap.GetVertexID(dst) - e.Label = ggraph.kdb.keyMap.GetLabelID(label) + e.Gid = ggraph.kdb.keyMap.GetEdgeID(ggraph.graphKey, eid) + e.From = ggraph.kdb.keyMap.GetVertexID(ggraph.graphKey, src) + e.To = ggraph.kdb.keyMap.GetVertexID(ggraph.graphKey, dst) + e.Label = ggraph.kdb.keyMap.GetLabelID(ggraph.graphKey, label) if load { ekey := EdgeKey(ggraph.graphKey, eid, src, dst, label) dataValue, err := it.Get(ekey) @@ -645,7 +642,7 @@ func (ggraph *GridsGraph) GetInEdgeChannel(reqChan chan gdbi.ElementLookup, load // GetEdge loads an edge given an id. It returns nil if not found func (ggraph *GridsGraph) GetEdge(id string, loadProp bool) *gripql.Edge { - ekey, ok := ggraph.kdb.keyMap.GetEdgeKey(id) + ekey, ok := ggraph.kdb.keyMap.GetEdgeKey(ggraph.graphKey, id) if !ok { return nil } @@ -656,10 +653,10 @@ func (ggraph *GridsGraph) GetEdge(id string, loadProp bool) *gripql.Edge { for it.Seek(ekeyPrefix); it.Valid() && bytes.HasPrefix(it.Key(), ekeyPrefix); it.Next() { _, eid, src, dst, label := EdgeKeyParse(it.Key()) e = &gripql.Edge{ - Gid: ggraph.kdb.keyMap.GetEdgeID(eid), - From: ggraph.kdb.keyMap.GetVertexID(src), - To: ggraph.kdb.keyMap.GetVertexID(dst), - Label: ggraph.kdb.keyMap.GetLabelID(label), + Gid: ggraph.kdb.keyMap.GetEdgeID(ggraph.graphKey, eid), + From: ggraph.kdb.keyMap.GetVertexID(ggraph.graphKey, src), + To: ggraph.kdb.keyMap.GetVertexID(ggraph.graphKey, dst), + Label: ggraph.kdb.keyMap.GetLabelID(ggraph.graphKey, label), } if loadProp { d, _ := it.Value() @@ -695,9 +692,9 @@ func (ggraph *GridsGraph) GetVertexList(ctx context.Context, loadProp bool) <-ch v := &gripql.Vertex{} keyValue := it.Key() _, vKey := VertexKeyParse(keyValue) - lKey := ggraph.kdb.keyMap.GetVertexLabel(vKey) - v.Gid = ggraph.kdb.keyMap.GetVertexID(vKey) - v.Label = ggraph.kdb.keyMap.GetLabelID(lKey) + lKey := ggraph.kdb.keyMap.GetVertexLabel(ggraph.graphKey, vKey) + v.Gid = ggraph.kdb.keyMap.GetVertexID(ggraph.graphKey, vKey) + v.Label = ggraph.kdb.keyMap.GetLabelID(ggraph.graphKey, lKey) if loadProp { dataValue, _ := it.Value() v.Data = protoutil.NewStruct() diff --git a/grids/graph_path.go b/grids/graph_path.go index d2bb6db3..8e82abd1 100644 --- a/grids/graph_path.go +++ b/grids/graph_path.go @@ -50,13 +50,13 @@ func NewPathTraveler(tr *gdbi.Traveler, isVertex bool, gg *GridsGraph) *PathTrav el := RawDataElement{} cur := tr.GetCurrent() if isVertex { - el.Gid, _ = gg.kdb.keyMap.GetVertexKey(cur.ID) - el.Label = gg.kdb.keyMap.GetVertexLabel(el.Gid) + el.Gid, _ = gg.kdb.keyMap.GetVertexKey(gg.graphKey, cur.ID) + el.Label = gg.kdb.keyMap.GetVertexLabel(gg.graphKey, el.Gid) } else { - el.Gid, _ = gg.kdb.keyMap.GetEdgeKey(cur.ID) - el.Label = gg.kdb.keyMap.GetEdgeLabel(el.Gid) - el.To, _ = gg.kdb.keyMap.GetVertexKey(cur.To) - el.From, _ = gg.kdb.keyMap.GetVertexKey(cur.From) + el.Gid, _ = gg.kdb.keyMap.GetEdgeKey(gg.graphKey, cur.ID) + el.Label = gg.kdb.keyMap.GetEdgeLabel(gg.graphKey, el.Gid) + el.To, _ = gg.kdb.keyMap.GetVertexKey(gg.graphKey, cur.To) + el.From, _ = gg.kdb.keyMap.GetVertexKey(gg.graphKey, cur.From) } return &PathTraveler{ current: &el, @@ -168,8 +168,8 @@ func (r *PathVProc) Process(ctx context.Context, in chan *PathTraveler, out chan } } else { for _, i := range r.ids { - if key, ok := r.db.kdb.keyMap.GetVertexKey(i); ok { - label := r.db.kdb.keyMap.GetVertexLabel(key) + if key, ok := r.db.kdb.keyMap.GetVertexKey(r.db.graphKey, i); ok { + label := r.db.kdb.keyMap.GetVertexLabel(r.db.graphKey, key) out <- &PathTraveler{ current: &RawDataElement{Gid: key, Label: label}, } @@ -289,16 +289,16 @@ func (r *PathInEProc) Process(ctx context.Context, in chan *PathTraveler, out ch func (rd *RawDataElement) VertexDataElement(ggraph *GridsGraph) *gdbi.DataElement { - Gid := ggraph.kdb.keyMap.GetVertexID(rd.Gid) - Label := ggraph.kdb.keyMap.GetLabelID(rd.Label) + Gid := ggraph.kdb.keyMap.GetVertexID(ggraph.graphKey, rd.Gid) + Label := ggraph.kdb.keyMap.GetLabelID(ggraph.graphKey, rd.Label) return &gdbi.DataElement{ID: Gid, Label: Label} } func (rd *RawDataElement) EdgeDataElement(ggraph *GridsGraph) *gdbi.DataElement { - Gid := ggraph.kdb.keyMap.GetEdgeID(rd.Gid) - Label := ggraph.kdb.keyMap.GetLabelID(rd.Label) - To := ggraph.kdb.keyMap.GetEdgeID(rd.To) - From := ggraph.kdb.keyMap.GetEdgeID(rd.From) + Gid := ggraph.kdb.keyMap.GetEdgeID(ggraph.graphKey, rd.Gid) + Label := ggraph.kdb.keyMap.GetLabelID(ggraph.graphKey, rd.Label) + To := ggraph.kdb.keyMap.GetEdgeID(ggraph.graphKey, rd.To) + From := ggraph.kdb.keyMap.GetEdgeID(ggraph.graphKey, rd.From) return &gdbi.DataElement{ID: Gid, To: To, From: From, Label: Label} } @@ -316,7 +316,7 @@ func (ggraph *GridsGraph) RawGetVertexList(ctx context.Context) <-chan *RawDataE } keyValue := it.Key() _, vkey := VertexKeyParse(keyValue) - lkey := ggraph.kdb.keyMap.GetVertexLabel(vkey) + lkey := ggraph.kdb.keyMap.GetVertexLabel(ggraph.graphKey, vkey) o <- &RawDataElement{ Gid: vkey, Label: lkey, @@ -359,7 +359,7 @@ func (ggraph *GridsGraph) RawGetOutChannel(reqChan chan *RawElementLookup, edgeL o := make(chan *RawElementLookup, 100) edgeLabelKeys := make([]uint64, 0, len(edgeLabels)) for i := range edgeLabels { - el, ok := ggraph.kdb.keyMap.GetLabelKey(edgeLabels[i]) + el, ok := ggraph.kdb.keyMap.GetLabelKey(ggraph.graphKey,edgeLabels[i]) if ok { edgeLabelKeys = append(edgeLabelKeys, el) } @@ -373,7 +373,7 @@ func (ggraph *GridsGraph) RawGetOutChannel(reqChan chan *RawElementLookup, edgeL keyValue := it.Key() _, _, _, dstvkey, lkey := SrcEdgeKeyParse(keyValue) if len(edgeLabels) == 0 || containsUint(edgeLabelKeys, lkey) { - dstlkey := ggraph.kdb.keyMap.GetVertexLabel(dstvkey) + dstlkey := ggraph.kdb.keyMap.GetVertexLabel(ggraph.graphKey, dstvkey) o <- &RawElementLookup{ Element: &RawDataElement{ Gid: dstvkey, @@ -395,7 +395,7 @@ func (ggraph *GridsGraph) RawGetInChannel(reqChan chan *RawElementLookup, edgeLa o := make(chan *RawElementLookup, 100) edgeLabelKeys := make([]uint64, 0, len(edgeLabels)) for i := range edgeLabels { - el, ok := ggraph.kdb.keyMap.GetLabelKey(edgeLabels[i]) + el, ok := ggraph.kdb.keyMap.GetLabelKey(ggraph.graphKey, edgeLabels[i]) if ok { edgeLabelKeys = append(edgeLabelKeys, el) } @@ -409,7 +409,7 @@ func (ggraph *GridsGraph) RawGetInChannel(reqChan chan *RawElementLookup, edgeLa keyValue := it.Key() _, _, srcvkey, _, lkey := DstEdgeKeyParse(keyValue) if len(edgeLabels) == 0 || containsUint(edgeLabelKeys, lkey) { - srclkey := ggraph.kdb.keyMap.GetVertexLabel(srcvkey) + srclkey := ggraph.kdb.keyMap.GetVertexLabel(ggraph.graphKey, srcvkey) o <- &RawElementLookup{ Element: &RawDataElement{ Gid: srcvkey, @@ -431,7 +431,7 @@ func (ggraph *GridsGraph) RawGetOutEdgeChannel(reqChan chan *RawElementLookup, e o := make(chan *RawElementLookup, 100) edgeLabelKeys := make([]uint64, 0, len(edgeLabels)) for i := range edgeLabels { - el, ok := ggraph.kdb.keyMap.GetLabelKey(edgeLabels[i]) + el, ok := ggraph.kdb.keyMap.GetLabelKey(ggraph.graphKey, edgeLabels[i]) if ok { edgeLabelKeys = append(edgeLabelKeys, el) } @@ -468,7 +468,7 @@ func (ggraph *GridsGraph) RawGetInEdgeChannel(reqChan chan *RawElementLookup, ed o := make(chan *RawElementLookup, 100) edgeLabelKeys := make([]uint64, 0, len(edgeLabels)) for i := range edgeLabels { - el, ok := ggraph.kdb.keyMap.GetLabelKey(edgeLabels[i]) + el, ok := ggraph.kdb.keyMap.GetLabelKey(ggraph.graphKey, edgeLabels[i]) if ok { edgeLabelKeys = append(edgeLabelKeys, el) } diff --git a/grids/keymap.go b/grids/keymap.go index 14e010ea..f828dbb1 100644 --- a/grids/keymap.go +++ b/grids/keymap.go @@ -53,89 +53,84 @@ func (km *KeyMap) Close() { } -//TODO: implement func (km *KeyMap) GetGraphKey(id string) uint64 { - u, ok := getIdKey(gIdPrefix, id, km.db) + u, ok := getIdKey(0, gIdPrefix, id, km.db) if ok { return u } km.gIncMut.Lock() o := dbInc(&km.gIncCur, gInc, km.db) km.gIncMut.Unlock() - setKeyId(gKeyPrefix, id, o, km.db) - setIdKey(gIdPrefix, id, o, km.db) + setKeyId(0, gKeyPrefix, id, o, km.db) + setIdKey(0, gIdPrefix, id, o, km.db) return o } //GetGraphID func (km *KeyMap) GetGraphID(key uint64) string { - k, _ := getKeyId(gKeyPrefix, key, km.db) + k, _ := getKeyId(0, gKeyPrefix, key, km.db) return k } //GetsertVertexKey : Get or Insert Vertex Key -func (km *KeyMap) GetsertVertexKey(id, label string) (uint64, uint64) { - o, ok := getIdKey(vIdPrefix, id, km.db) +func (km *KeyMap) GetsertVertexKey(graph uint64, id, label string) (uint64, uint64) { + o, ok := getIdKey(graph, vIdPrefix, id, km.db) if !ok { km.vIncMut.Lock() o = dbInc(&km.vIncCur, vInc, km.db) km.vIncMut.Unlock() - setKeyId(vKeyPrefix, id, o, km.db) - setIdKey(vIdPrefix, id, o, km.db) + setKeyId(graph, vKeyPrefix, id, o, km.db) + setIdKey(graph, vIdPrefix, id, o, km.db) } - lkey := km.GetsertLabelKey(label) - setIdLabel(vLabelPrefix, o, lkey, km.db) + lkey := km.GetsertLabelKey(graph, label) + setIdLabel(graph, vLabelPrefix, o, lkey, km.db) return o, lkey } -func (km *KeyMap) GetVertexKey(id string) (uint64, bool) { - return getIdKey(vIdPrefix, id, km.db) +func (km *KeyMap) GetVertexKey(graph uint64, id string) (uint64, bool) { + return getIdKey(graph, vIdPrefix, id, km.db) } //GetVertexID -func (km *KeyMap) GetVertexID(key uint64) string { - k, _ := getKeyId(vKeyPrefix, key, km.db) +func (km *KeyMap) GetVertexID(graph uint64, key uint64) string { + k, _ := getKeyId(graph, vKeyPrefix, key, km.db) return k } -func (km *KeyMap) GetVertexLabel(key uint64) uint64 { - k, _ := getIdLabel(vLabelPrefix, key, km.db) +func (km *KeyMap) GetVertexLabel(graph uint64, key uint64) uint64 { + k, _ := getIdLabel(graph, vLabelPrefix, key, km.db) return k } -func (km *KeyMap) DelVertexLabel(key uint64) { - -} - //TODO: implement -func (km *KeyMap) GetsertEdgeKey(id, label string) (uint64, uint64) { - o, ok := getIdKey(eIdPrefix, id, km.db) +func (km *KeyMap) GetsertEdgeKey(graph uint64, id, label string) (uint64, uint64) { + o, ok := getIdKey(graph, eIdPrefix, id, km.db) if !ok { km.eIncMut.Lock() o = dbInc(&km.eIncCur, eInc, km.db) km.eIncMut.Unlock() - setKeyId(eKeyPrefix, id, o, km.db) - setIdKey(eIdPrefix, id, o, km.db) + setKeyId(graph, eKeyPrefix, id, o, km.db) + setIdKey(graph, eIdPrefix, id, o, km.db) } - lkey := km.GetsertLabelKey(label) - setIdLabel(eLabelPrefix, o, lkey, km.db) + lkey := km.GetsertLabelKey(graph, label) + setIdLabel(graph, eLabelPrefix, o, lkey, km.db) return o, lkey } //TODO: implement -func (km *KeyMap) GetEdgeKey(id string) (uint64, bool) { - return getIdKey(eIdPrefix, id, km.db) +func (km *KeyMap) GetEdgeKey(graph uint64, id string) (uint64, bool) { + return getIdKey(graph, eIdPrefix, id, km.db) } //TODO: implement -func (km *KeyMap) GetEdgeID(key uint64) string { - k, _ := getKeyId(eKeyPrefix, key, km.db) +func (km *KeyMap) GetEdgeID(graph uint64, key uint64) string { + k, _ := getKeyId(graph, eKeyPrefix, key, km.db) return k } -func (km *KeyMap) GetEdgeLabel(key uint64) uint64 { - k, _ := getIdLabel(eLabelPrefix, key, km.db) +func (km *KeyMap) GetEdgeLabel(graph uint64, key uint64) uint64 { + k, _ := getIdLabel(graph, eLabelPrefix, key, km.db) return k } @@ -145,42 +140,40 @@ func (km *KeyMap) SetEdgeLabel(key, label uint64) { } */ -func (km *KeyMap) DelEdgeLabel(key uint64) { - -} - //TODO: implement -func (km *KeyMap) DelEdgeKey(id string) { +func (km *KeyMap) DelEdgeKey(graph uint64, id string) { } //TODO: implement -func (km *KeyMap) GetsertLabelKey(id string) uint64 { - u, ok := getIdKey(lIdPrefix, id, km.db) +func (km *KeyMap) GetsertLabelKey(graph uint64, id string) uint64 { + u, ok := getIdKey(graph, lIdPrefix, id, km.db) if ok { return u } km.lIncMut.Lock() o := dbInc(&km.lIncCur, lInc, km.db) km.lIncMut.Unlock() - setKeyId(lKeyPrefix, id, o, km.db) - setIdKey(lIdPrefix, id, o, km.db) + setKeyId(graph, lKeyPrefix, id, o, km.db) + setIdKey(graph, lIdPrefix, id, o, km.db) return o } -func (km *KeyMap) GetLabelKey(id string) (uint64, bool) { - return getIdKey(lIdPrefix, id, km.db) +func (km *KeyMap) GetLabelKey(graph uint64, id string) (uint64, bool) { + return getIdKey(graph, lIdPrefix, id, km.db) } //TODO: implement -func (km *KeyMap) GetLabelID(key uint64) string { - k, _ := getKeyId(lKeyPrefix, key, km.db) +func (km *KeyMap) GetLabelID(graph uint64, key uint64) string { + k, _ := getKeyId(graph, lKeyPrefix, key, km.db) return k } -func getIdKey(prefix []byte, id string, db *pogreb.DB) (uint64, bool) { - k := bytes.Join( [][]byte{ prefix, []byte(id) }, []byte{} ) +func getIdKey(graph uint64, prefix []byte, id string, db *pogreb.DB) (uint64, bool) { + g := make([]byte, binary.MaxVarintLen64) + binary.PutUvarint(g, graph) + k := bytes.Join( [][]byte{ prefix, g, []byte(id) }, []byte{} ) v, err := db.Get(k) if v == nil || err != nil { return 0, false @@ -189,10 +182,20 @@ func getIdKey(prefix []byte, id string, db *pogreb.DB) (uint64, bool) { return key, true } -func getIdLabel(prefix byte, key uint64, db *pogreb.DB) (uint64, bool) { - k := make([]byte, binary.MaxVarintLen64 + 1) +func setIdKey(graph uint64, prefix []byte, id string, key uint64, db *pogreb.DB) { + g := make([]byte, binary.MaxVarintLen64) + binary.PutUvarint(g, graph) + k := bytes.Join( [][]byte{ prefix, g, []byte(id) }, []byte{} ) + b := make([]byte, binary.MaxVarintLen64) + binary.PutUvarint(b, key) + db.Put(k, b) +} + +func getIdLabel(graph uint64, prefix byte, key uint64, db *pogreb.DB) (uint64, bool) { + k := make([]byte, binary.MaxVarintLen64*2 + 1) k[0] = prefix - binary.PutUvarint(k[1:binary.MaxVarintLen64+1], key) + binary.PutUvarint(k[1:binary.MaxVarintLen64+1], graph) + binary.PutUvarint(k[binary.MaxVarintLen64+1:binary.MaxVarintLen64*2+1], key) v, err := db.Get(k) if v == nil || err != nil { return 0, false @@ -201,10 +204,11 @@ func getIdLabel(prefix byte, key uint64, db *pogreb.DB) (uint64, bool) { return label, true } -func setIdLabel(prefix byte, key uint64, label uint64, db *pogreb.DB) error { - k := make([]byte, binary.MaxVarintLen64 + 1) +func setIdLabel(graph uint64, prefix byte, key uint64, label uint64, db *pogreb.DB) error { + k := make([]byte, binary.MaxVarintLen64 * 2 + 1) k[0] = prefix - binary.PutUvarint(k[1:binary.MaxVarintLen64+1], key) + binary.PutUvarint(k[1:binary.MaxVarintLen64+1], graph) + binary.PutUvarint(k[binary.MaxVarintLen64+1:binary.MaxVarintLen64*2+1], key) b := make([]byte, binary.MaxVarintLen64) binary.PutUvarint(b, label) @@ -213,24 +217,19 @@ func setIdLabel(prefix byte, key uint64, label uint64, db *pogreb.DB) error { return err } -func setIdKey(prefix []byte, id string, key uint64, db *pogreb.DB) { - k := bytes.Join( [][]byte{ prefix, []byte(id) }, []byte{} ) - b := make([]byte, binary.MaxVarintLen64) - binary.PutUvarint(b, key) - db.Put(k, b) -} - -func setKeyId(prefix byte, id string, key uint64, db *pogreb.DB) { - k := make([]byte, binary.MaxVarintLen64 + 1) +func setKeyId(graph uint64, prefix byte, id string, key uint64, db *pogreb.DB) { + k := make([]byte, binary.MaxVarintLen64*2 + 1) k[0] = prefix - binary.PutUvarint(k[1:binary.MaxVarintLen64+1], key) + binary.PutUvarint(k[1:binary.MaxVarintLen64+1], graph) + binary.PutUvarint(k[binary.MaxVarintLen64+1:binary.MaxVarintLen64*2+1], key) db.Put(k, []byte(id)) } -func getKeyId(prefix byte, key uint64, db *pogreb.DB) (string, bool) { - k := make([]byte, binary.MaxVarintLen64 + 1) +func getKeyId(graph uint64, prefix byte, key uint64, db *pogreb.DB) (string, bool) { + k := make([]byte, binary.MaxVarintLen64*2 + 1) k[0] = prefix - binary.PutUvarint(k[1:binary.MaxVarintLen64+1], key) + binary.PutUvarint(k[1:binary.MaxVarintLen64+1], graph) + binary.PutUvarint(k[binary.MaxVarintLen64+1:binary.MaxVarintLen64*2+1], key) b, err := db.Get(k) if b == nil || err != nil { return "", false diff --git a/grids/test/keymap_test.go b/grids/test/keymap_test.go index 4fe44aa2..de9555b5 100644 --- a/grids/test/keymap_test.go +++ b/grids/test/keymap_test.go @@ -29,6 +29,8 @@ func TestKeyInsert(t *testing.T) { keymap := grids.NewKeyMap(keykv) + graphKey := keymap.GetGraphKey("test") + vertexKeys := make([]uint64, 100) var evenLabel uint64 for i := range vertexKeys { @@ -36,7 +38,7 @@ func TestKeyInsert(t *testing.T) { if i % 2 == 1 { label = "odd" } - k, l := keymap.GetsertVertexKey(fmt.Sprintf("vertex_%d", i), label) + k, l := keymap.GetsertVertexKey(graphKey, fmt.Sprintf("vertex_%d", i), label) if i == 0 { evenLabel = l } else { @@ -62,12 +64,12 @@ func TestKeyInsert(t *testing.T) { } } for i := range vertexKeys { - id := keymap.GetVertexID(vertexKeys[i]) + id := keymap.GetVertexID(graphKey, vertexKeys[i]) if id != fmt.Sprintf("vertex_%d", i) { t.Errorf("ID test_%d != %s", i, id) } - lkey := keymap.GetVertexLabel(vertexKeys[i]) - lid := keymap.GetLabelID(lkey) + lkey := keymap.GetVertexLabel(graphKey, vertexKeys[i]) + lid := keymap.GetLabelID(graphKey, lkey) if i % 2 == 1 { if lid != "odd" { t.Errorf("Wrong vertex label %s : %s != %s", id, lid, "odd") @@ -86,7 +88,7 @@ func TestKeyInsert(t *testing.T) { if i % 2 == 1 { label = "odd_edge" } - k, _ := keymap.GetsertEdgeKey(fmt.Sprintf("edge_%d", i), label) + k, _ := keymap.GetsertEdgeKey(graphKey, fmt.Sprintf("edge_%d", i), label) edgeKeys[i] = k } for i := range edgeKeys { @@ -99,7 +101,7 @@ func TestKeyInsert(t *testing.T) { } } for i := range edgeKeys { - id := keymap.GetEdgeID(edgeKeys[i]) + id := keymap.GetEdgeID(graphKey, edgeKeys[i]) if id != fmt.Sprintf("edge_%d", i) { t.Errorf("ID test_%d != %s", i, id) } @@ -129,7 +131,7 @@ func TestKeyInsert(t *testing.T) { labelKeys := make([]uint64, 100) for i := range labelKeys { - k := keymap.GetsertLabelKey(fmt.Sprintf("label_%d", i)) + k := keymap.GetsertLabelKey(graphKey, fmt.Sprintf("label_%d", i)) labelKeys[i] = k } for i := range labelKeys { @@ -142,7 +144,7 @@ func TestKeyInsert(t *testing.T) { } } for i := range labelKeys { - id := keymap.GetLabelID(labelKeys[i]) + id := keymap.GetLabelID(graphKey, labelKeys[i]) if id != fmt.Sprintf("label_%d", i) { t.Errorf("ID graph_%d != %s", i, id) } diff --git a/grids/test/pathcompile_test.go b/grids/test/pathcompile_test.go index b133607d..c8122540 100644 --- a/grids/test/pathcompile_test.go +++ b/grids/test/pathcompile_test.go @@ -40,7 +40,10 @@ func TestPath2Step(t *testing.T) { if len(noLoadPaths) > 0 { fmt.Printf("Found Path: %#v\n", noLoadPaths) path := grids.SelectPath(q.Statements, noLoadPaths[0]) - proc := grids.RawPathCompile( nil, ps, path ) + proc, err := grids.RawPathCompile( nil, ps, path ) + if err != nil { + t.Error(err) + } fmt.Printf("Proc: %s\n", proc) } }