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()) |
} |
} |