| Index: go/src/infra/gae/libs/wrapper/memory/datastore_data.go
|
| diff --git a/go/src/infra/gae/libs/wrapper/memory/datastore_data.go b/go/src/infra/gae/libs/wrapper/memory/datastore_data.go
|
| index ee185cdc4c0d1f96c9a1f3ac52e2f0eea95ca1ab..7ff288cdae84816d13ddef3e890a4a31cafabd26 100644
|
| --- a/go/src/infra/gae/libs/wrapper/memory/datastore_data.go
|
| +++ b/go/src/infra/gae/libs/wrapper/memory/datastore_data.go
|
| @@ -81,6 +81,8 @@ func (d *dataStoreData) Unlock() {
|
| d.rwlock.Unlock()
|
| }
|
|
|
| +/////////////////////////// indicies(dataStoreData) ////////////////////////////
|
| +
|
| func groupMetaKey(key *datastore.Key) []byte {
|
| return keyBytes(noNS, newKey("", "__entity_group__", "", 1, rootKey(key)))
|
| }
|
| @@ -189,6 +191,18 @@ func (d *dataStoreData) putInner(key *datastore.Key, data *propertyList) (*datas
|
| return nil, err
|
| }
|
|
|
| + old := ents.Get(keyBytes(noNS, key))
|
| + oldPl := (*propertyList)(nil)
|
| + if old != nil {
|
| + oldPl = &propertyList{}
|
| + if err = oldPl.UnmarshalBinary(old); err != nil {
|
| + return nil, err
|
| + }
|
| + }
|
| + if err = updateIndicies(d.store, key, oldPl, data); err != nil {
|
| + return nil, err
|
| + }
|
| +
|
| ents.Set(keyBytes(noNS, key), dataBytes)
|
|
|
| return key, nil
|
| @@ -246,6 +260,18 @@ func (d *dataStoreData) del(ns string, key *datastore.Key) error {
|
| return err
|
| }
|
|
|
| + old := ents.Get(keyBuf)
|
| + oldPl := (*propertyList)(nil)
|
| + if old != nil {
|
| + oldPl = &propertyList{}
|
| + if err := oldPl.UnmarshalBinary(old); err != nil {
|
| + return err
|
| + }
|
| + }
|
| + if err := updateIndicies(d.store, key, oldPl, nil); err != nil {
|
| + return err
|
| + }
|
| +
|
| ents.Delete(keyBuf)
|
| return nil
|
| }
|
| @@ -258,7 +284,7 @@ func (d *dataStoreData) canApplyTxn(obj memContextObj) bool {
|
| if len(muts) == 0 { // read-only
|
| continue
|
| }
|
| - k, err := keyFromByteString(withNS, rk)
|
| + k, err := keyFromByteString(withNS, rk, "")
|
| if err != nil {
|
| panic(err)
|
| }
|
|
|