Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(312)

Unified Diff: service/datastore/multiarg.go

Issue 1355783002: Refactor keys and queries in datastore service and implementation. (Closed) Base URL: https://github.com/luci/gae.git@master
Patch Set: Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: service/datastore/multiarg.go
diff --git a/service/datastore/multiarg.go b/service/datastore/multiarg.go
index 8dca99c46aec59624dd5f704a22654b0a5e3722b..44408258e63b687badfbf7e6388296773e4e3afa 100644
--- a/service/datastore/multiarg.go
+++ b/service/datastore/multiarg.go
@@ -14,19 +14,19 @@ import (
type multiArgType struct {
valid bool
- getKey func(nk newKeyFunc, slot reflect.Value) (Key, error)
+ getKey func(aid, ns string, slot reflect.Value) (*Key, error)
getPM func(slot reflect.Value) (PropertyMap, error)
setPM func(slot reflect.Value, pm PropertyMap) error
- setKey func(slot reflect.Value, k Key)
+ setKey func(slot reflect.Value, k *Key)
newElem func() reflect.Value
}
-func (mat *multiArgType) GetKeysPMs(nk newKeyFunc, slice reflect.Value) ([]Key, []PropertyMap, error) {
- retKey := make([]Key, slice.Len())
+func (mat *multiArgType) GetKeysPMs(aid, ns string, slice reflect.Value) ([]*Key, []PropertyMap, error) {
+ retKey := make([]*Key, slice.Len())
retPM := make([]PropertyMap, slice.Len())
lme := errors.NewLazyMultiError(len(retKey))
for i := range retKey {
- key, err := mat.getKey(nk, slice.Index(i))
+ key, err := mat.getKey(aid, ns, slice.Index(i))
if !lme.Assign(i, err) {
retKey[i] = key
pm, err := mat.getPM(slice.Index(i))
@@ -84,8 +84,8 @@ func multiArgTypePLS(et reflect.Type) multiArgType {
ret := multiArgType{
valid: true,
- getKey: func(nk newKeyFunc, slot reflect.Value) (Key, error) {
- return newKeyObjErr(nk, slot.Addr().Interface())
+ getKey: func(aid, ns string, slot reflect.Value) (*Key, error) {
+ return newKeyObjErr(aid, ns, slot.Addr().Interface())
},
getPM: func(slot reflect.Value) (PropertyMap, error) {
return slot.Addr().Interface().(PropertyLoadSaver).Save(true)
@@ -93,7 +93,7 @@ func multiArgTypePLS(et reflect.Type) multiArgType {
setPM: func(slot reflect.Value, pm PropertyMap) error {
return slot.Addr().Interface().(PropertyLoadSaver).Load(pm)
},
- setKey: func(slot reflect.Value, k Key) {
+ setKey: func(slot reflect.Value, k *Key) {
setKey(slot.Addr().Interface(), k)
},
}
@@ -120,8 +120,8 @@ func multiArgTypePLSPtr(et reflect.Type) multiArgType {
ret := multiArgType{
valid: true,
- getKey: func(nk newKeyFunc, slot reflect.Value) (Key, error) {
- return newKeyObjErr(nk, slot.Interface())
+ getKey: func(aid, ns string, slot reflect.Value) (*Key, error) {
+ return newKeyObjErr(aid, ns, slot.Interface())
},
getPM: func(slot reflect.Value) (PropertyMap, error) {
return slot.Interface().(PropertyLoadSaver).Save(true)
@@ -129,7 +129,7 @@ func multiArgTypePLSPtr(et reflect.Type) multiArgType {
setPM: func(slot reflect.Value, pm PropertyMap) error {
return slot.Interface().(PropertyLoadSaver).Load(pm)
},
- setKey: func(slot reflect.Value, k Key) {
+ setKey: func(slot reflect.Value, k *Key) {
setKey(slot.Interface(), k)
},
}
@@ -157,8 +157,8 @@ func multiArgTypeStruct(et reflect.Type) multiArgType {
return multiArgType{
valid: true,
- getKey: func(nk newKeyFunc, slot reflect.Value) (Key, error) {
- return newKeyObjErr(nk, toPLS(slot))
+ getKey: func(aid, ns string, slot reflect.Value) (*Key, error) {
+ return newKeyObjErr(aid, ns, toPLS(slot))
},
getPM: func(slot reflect.Value) (PropertyMap, error) {
return toPLS(slot).(PropertyLoadSaver).Save(true)
@@ -166,7 +166,7 @@ func multiArgTypeStruct(et reflect.Type) multiArgType {
setPM: func(slot reflect.Value, pm PropertyMap) error {
return toPLS(slot).(PropertyLoadSaver).Load(pm)
},
- setKey: func(slot reflect.Value, k Key) {
+ setKey: func(slot reflect.Value, k *Key) {
setKey(toPLS(slot), k)
},
newElem: func() reflect.Value {
@@ -187,8 +187,8 @@ func multiArgTypeStructPtr(et reflect.Type) multiArgType {
return multiArgType{
valid: true,
- getKey: func(nk newKeyFunc, slot reflect.Value) (Key, error) {
- return newKeyObjErr(nk, toPLS(slot))
+ getKey: func(aid, ns string, slot reflect.Value) (*Key, error) {
+ return newKeyObjErr(aid, ns, toPLS(slot))
},
getPM: func(slot reflect.Value) (PropertyMap, error) {
return toPLS(slot).(PropertyLoadSaver).Save(true)
@@ -196,7 +196,7 @@ func multiArgTypeStructPtr(et reflect.Type) multiArgType {
setPM: func(slot reflect.Value, pm PropertyMap) error {
return toPLS(slot).(PropertyLoadSaver).Load(pm)
},
- setKey: func(slot reflect.Value, k Key) {
+ setKey: func(slot reflect.Value, k *Key) {
setKey(toPLS(slot), k)
},
newElem: func() reflect.Value {
@@ -210,8 +210,8 @@ func multiArgTypeInterface() multiArgType {
return multiArgType{
valid: true,
- getKey: func(nk newKeyFunc, slot reflect.Value) (Key, error) {
- return newKeyObjErr(nk, slot.Elem().Interface())
+ getKey: func(aid, ns string, slot reflect.Value) (*Key, error) {
+ return newKeyObjErr(aid, ns, slot.Elem().Interface())
},
getPM: func(slot reflect.Value) (PropertyMap, error) {
pls := mkPLS(slot.Elem().Interface())
@@ -221,15 +221,15 @@ func multiArgTypeInterface() multiArgType {
pls := mkPLS(slot.Elem().Interface())
return pls.Load(pm)
},
- setKey: func(slot reflect.Value, k Key) {
+ setKey: func(slot reflect.Value, k *Key) {
setKey(slot.Elem().Interface(), k)
},
}
}
-func newKeyObjErr(nk newKeyFunc, src interface{}) (Key, error) {
+func newKeyObjErr(aid, ns string, src interface{}) (*Key, error) {
pls := mkPLS(src)
- if key, _ := pls.GetMetaDefault("key", nil).(Key); key != nil {
+ if key, _ := pls.GetMetaDefault("key", nil).(*Key); key != nil {
return key, nil
}
@@ -244,20 +244,21 @@ func newKeyObjErr(nk newKeyFunc, src interface{}) (Key, error) {
iid := pls.GetMetaDefault("id", 0).(int64)
// get parent
- par, _ := pls.GetMetaDefault("parent", nil).(Key)
+ par, _ := pls.GetMetaDefault("parent", nil).(*Key)
- return nk(kind, sid, iid, par), nil
+ return NewKey(aid, ns, kind, sid, iid, par), nil
}
-func setKey(src interface{}, key Key) {
+func setKey(src interface{}, key *Key) {
pls := mkPLS(src)
if pls.SetMeta("key", key) == ErrMetaFieldUnset {
- if key.StringID() != "" {
- pls.SetMeta("id", key.StringID())
+ lst := key.Last()
dnj 2015/09/18 16:47:58 key.Last can return nil if the key is empty, no?
iannucci 2015/09/18 22:25:48 nil key gets boom
+ if lst.StringID != "" {
+ pls.SetMeta("id", lst.StringID)
} else {
- pls.SetMeta("id", key.IntID())
+ pls.SetMeta("id", lst.IntID)
}
- pls.SetMeta("kind", key.Kind())
+ pls.SetMeta("kind", lst.Kind)
pls.SetMeta("parent", key.Parent())
}
}

Powered by Google App Engine
This is Rietveld 408576698