func (d rdsImpl) AllocateIDs(incomplete *ds.Key, n int) (start int64, err error) { par, err := dsF2R(d.aeCtx, incomplete.Parent()) if err != nil { return } start, _, err = datastore.AllocateIDs(d.aeCtx, incomplete.Kind(), par, n) return }
func (d *dataStoreData) fixKeyLocked(ents *memCollection, key *ds.Key) (*ds.Key, error) { if key.Incomplete() { id, err := d.allocateIDsLocked(ents, key, 1) if err != nil { return key, err } key = ds.NewKey(key.AppID(), key.Namespace(), key.Kind(), "", id, key.Parent()) } return key, nil }
func (d *dataStoreData) allocateIDsLocked(ents *memCollection, incomplete *ds.Key, n int) (int64, error) { if d.disableSpecialEntities { return 0, errors.New("disableSpecialEntities is true so allocateIDs is disabled") } idKey := []byte(nil) if incomplete.Parent() == nil { idKey = rootIDsKey(incomplete.Kind()) } else { idKey = groupIDsKey(incomplete) } return incrementLocked(ents, idKey, n), nil }
// PropertyMapPartially turns a regular PropertyMap into a SerializedPmap. // Essentially all the []Property's become SerializedPslice, using cmpbin and // datastore/serialize's encodings. func PropertyMapPartially(k *ds.Key, pm ds.PropertyMap) (ret SerializedPmap) { ret = make(SerializedPmap, len(pm)+2) if k != nil { ret["__key__"] = [][]byte{ToBytes(ds.MkProperty(k))} for k != nil { ret["__ancestor__"] = append(ret["__ancestor__"], ToBytes(ds.MkProperty(k))) k = k.Parent() } } for k, vals := range pm { newVals := PropertySlice(vals) if len(newVals) > 0 { ret[k] = newVals } } return }