func NewGraph(euid uint64, exid string) (*SubGraph, error) { // This would set the Result field in SubGraph, // and populate the children for attributes. if len(exid) > 0 { u, err := uid.GetOrAssign(exid) if err != nil { x.Err(glog, err).WithField("xid", exid).Error( "While GetOrAssign uid from external id") return nil, err } glog.WithField("xid", exid).WithField("_uid_", u).Debug("GetOrAssign") euid = u } if euid == 0 { err := fmt.Errorf("Query internal id is zero") x.Err(glog, err).Error("Invalid query") return nil, err } // Encode uid into result flatbuffer. b := flatbuffers.NewBuilder(0) omatrix := x.UidlistOffset(b, []uint64{euid}) // Also need to add nil value to keep this consistent. var voffset flatbuffers.UOffsetT { bvo := b.CreateByteVector(x.Nilbyte) task.ValueStart(b) task.ValueAddVal(b, bvo) voffset = task.ValueEnd(b) } task.ResultStartUidmatrixVector(b, 1) b.PrependUOffsetT(omatrix) mend := b.EndVector(1) task.ResultStartValuesVector(b, 1) b.PrependUOffsetT(voffset) vend := b.EndVector(1) task.ResultStart(b) task.ResultAddUidmatrix(b, mend) task.ResultAddValues(b, vend) rend := task.ResultEnd(b) b.Finish(rend) sg := new(SubGraph) sg.Attr = "_root_" sg.result = b.Bytes[b.Head():] // Also add query for consistency and to allow for ToJson() later. sg.query = createTaskQuery(sg.Attr, []uint64{euid}) return sg, nil }
func GetUid(s string, instanceIdx uint64, numInstances uint64) (uint64, error) { if strings.HasPrefix(s, "_uid_:") { return strconv.ParseUint(s[6:], 0, 64) } return uid.GetOrAssign(s, instanceIdx, numInstances) }
func getUid(s string) (uint64, error) { if strings.HasPrefix(s, "_uid_:") { return strconv.ParseUint(s[6:], 0, 64) } return uid.GetOrAssign(s) }