Index: service/datastore/multiarg.go |
diff --git a/service/datastore/multiarg.go b/service/datastore/multiarg.go |
index 2eec2ec103547445298aa4627cbdf2741342381c..61d18dc14814681789a95cc76b73131e445d6a88 100644 |
--- a/service/datastore/multiarg.go |
+++ b/service/datastore/multiarg.go |
@@ -14,22 +14,29 @@ import ( |
type multiArgType struct { |
valid bool |
- 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) |
- newElem func() reflect.Value |
+ getKey func(aid, ns string, slot reflect.Value) (*Key, error) |
+ getPM func(slot reflect.Value) (PropertyMap, error) |
+ getMetaPM func(slot reflect.Value) PropertyMap |
+ setPM func(slot reflect.Value, pm PropertyMap) error |
+ setKey func(slot reflect.Value, k *Key) |
+ newElem func() reflect.Value |
} |
-func (mat *multiArgType) GetKeysPMs(aid, ns string, slice reflect.Value) ([]*Key, []PropertyMap, error) { |
+func (mat *multiArgType) GetKeysPMs(aid, ns string, slice reflect.Value, meta bool) ([]*Key, []PropertyMap, error) { |
retKey := make([]*Key, slice.Len()) |
retPM := make([]PropertyMap, slice.Len()) |
+ getter := mat.getPM |
+ if meta { |
+ getter = func(slot reflect.Value) (PropertyMap, error) { |
+ return mat.getMetaPM(slot), nil |
+ } |
+ } |
lme := errors.NewLazyMultiError(len(retKey)) |
for i := range retKey { |
key, err := mat.getKey(aid, ns, slice.Index(i)) |
if !lme.Assign(i, err) { |
retKey[i] = key |
- pm, err := mat.getPM(slice.Index(i)) |
+ pm, err := getter(slice.Index(i)) |
if !lme.Assign(i, err) { |
retPM[i] = pm |
} |
@@ -90,6 +97,9 @@ func multiArgTypePLS(et reflect.Type) multiArgType { |
getPM: func(slot reflect.Value) (PropertyMap, error) { |
return slot.Addr().Interface().(PropertyLoadSaver).Save(true) |
}, |
+ getMetaPM: func(slot reflect.Value) PropertyMap { |
+ return slot.Addr().Interface().(PropertyLoadSaver).GetAllMeta() |
+ }, |
setPM: func(slot reflect.Value, pm PropertyMap) error { |
return slot.Addr().Interface().(PropertyLoadSaver).Load(pm) |
}, |
@@ -126,6 +136,9 @@ func multiArgTypePLSPtr(et reflect.Type) multiArgType { |
getPM: func(slot reflect.Value) (PropertyMap, error) { |
return slot.Interface().(PropertyLoadSaver).Save(true) |
}, |
+ getMetaPM: func(slot reflect.Value) PropertyMap { |
+ return slot.Interface().(PropertyLoadSaver).GetAllMeta() |
+ }, |
setPM: func(slot reflect.Value, pm PropertyMap) error { |
return slot.Interface().(PropertyLoadSaver).Load(pm) |
}, |
@@ -163,6 +176,9 @@ func multiArgTypeStruct(et reflect.Type) multiArgType { |
getPM: func(slot reflect.Value) (PropertyMap, error) { |
return toPLS(slot).(PropertyLoadSaver).Save(true) |
}, |
+ getMetaPM: func(slot reflect.Value) PropertyMap { |
+ return toPLS(slot).(PropertyLoadSaver).GetAllMeta() |
+ }, |
setPM: func(slot reflect.Value, pm PropertyMap) error { |
return toPLS(slot).(PropertyLoadSaver).Load(pm) |
}, |
@@ -193,6 +209,9 @@ func multiArgTypeStructPtr(et reflect.Type) multiArgType { |
getPM: func(slot reflect.Value) (PropertyMap, error) { |
return toPLS(slot).(PropertyLoadSaver).Save(true) |
}, |
+ getMetaPM: func(slot reflect.Value) PropertyMap { |
+ return toPLS(slot).(PropertyLoadSaver).GetAllMeta() |
+ }, |
setPM: func(slot reflect.Value, pm PropertyMap) error { |
return toPLS(slot).(PropertyLoadSaver).Load(pm) |
}, |
@@ -217,6 +236,10 @@ func multiArgTypeInterface() multiArgType { |
pls := mkPLS(slot.Elem().Interface()) |
return pls.Save(true) |
}, |
+ getMetaPM: func(slot reflect.Value) PropertyMap { |
+ pls := mkPLS(slot.Elem().Interface()) |
+ return pls.GetAllMeta() |
+ }, |
setPM: func(slot reflect.Value, pm PropertyMap) error { |
pls := mkPLS(slot.Elem().Interface()) |
return pls.Load(pm) |