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

Unified Diff: service/datastore/pls_impl.go

Issue 1516173002: Fix error message from KeyForObj when passing an invalid struct. (Closed) Base URL: https://github.com/luci/gae.git@master
Patch Set: remove accidental extra test Created 5 years 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/pls_impl.go
diff --git a/service/datastore/pls_impl.go b/service/datastore/pls_impl.go
index 2176b7e144ccd9e14c980ad22e7fdbe7dff4990d..9fab74f59e6a18364acbca48238867a03d0ff12c 100644
--- a/service/datastore/pls_impl.go
+++ b/service/datastore/pls_impl.go
@@ -53,10 +53,6 @@ func typeMismatchReason(val interface{}, v reflect.Value) string {
}
func (p *structPLS) Load(propMap PropertyMap) error {
- if err := p.Problem(); err != nil {
- return err
- }
-
convFailures := errors.MultiError(nil)
t := reflect.Type(nil)
@@ -205,10 +201,6 @@ func loadInner(codec *structCodec, structValue reflect.Value, index int, name st
}
func (p *structPLS) Save(withMeta bool) (PropertyMap, error) {
- if err := p.Problem(); err != nil {
- return nil, err
- }
-
ret := PropertyMap(nil)
if withMeta {
ret = getMGS(p.o.Addr().Interface()).GetAllMeta()
@@ -229,10 +221,6 @@ func (p *structPLS) getDefaultKind() string {
}
func (p *structPLS) save(propMap PropertyMap, prefix string, is IndexSetting) (idxCount int, err error) {
- if err = p.Problem(); err != nil {
- return
- }
-
saveProp := func(name string, si IndexSetting, v reflect.Value, st *structTag) (err error) {
if st.substructCodec != nil {
count, err := (&structPLS{v, st.substructCodec}).save(propMap, name, si)
@@ -292,19 +280,15 @@ func (p *structPLS) save(propMap PropertyMap, prefix string, is IndexSetting) (i
return
}
-func (p *structPLS) GetMeta(key string) (interface{}, error) {
- if err := p.Problem(); err != nil {
- return nil, err
- }
-
+func (p *structPLS) GetMeta(key string) (interface{}, bool) {
if idx, ok := p.c.byMeta[key]; ok {
if val, ok := p.getMetaFor(idx); ok {
- return val, nil
+ return val, true
}
} else if key == "kind" {
- return p.getDefaultKind(), nil
+ return p.getDefaultKind(), true
}
- return nil, ErrMetaFieldUnset
+ return nil, false
}
func (p *structPLS) getMetaFor(idx int) (interface{}, bool) {
@@ -352,25 +336,19 @@ func (p *structPLS) GetAllMeta() PropertyMap {
return ret
}
-func (p *structPLS) GetMetaDefault(key string, def interface{}) interface{} {
- return GetMetaDefaultImpl(p.GetMeta, key, def)
-}
-
-func (p *structPLS) SetMeta(key string, val interface{}) (err error) {
- if err = p.Problem(); err != nil {
- return
- }
+func (p *structPLS) SetMeta(key string, val interface{}) bool {
idx, ok := p.c.byMeta[key]
if !ok {
- return ErrMetaFieldUnset
+ return false
}
st := p.c.byIndex[idx]
if !st.canSet {
- return fmt.Errorf("gae/helper: cannot set meta %q: unexported field", key)
+ return false
}
if st.convert {
- return p.o.Field(idx).Addr().Interface().(PropertyConverter).FromProperty(
+ err := p.o.Field(idx).Addr().Interface().(PropertyConverter).FromProperty(
MkPropertyNI(val))
+ return err == nil
}
// setting a BoolField
@@ -388,11 +366,9 @@ func (p *structPLS) SetMeta(key string, val interface{}) (err error) {
value := reflect.ValueOf(val)
f.Set(value.Convert(f.Type()))
}
- return nil
+ return true
}
-func (p *structPLS) Problem() error { return p.c.problem }
-
var (
// The RWMutex is chosen intentionally, as the majority of access to the
// structCodecs map will be in parallel and will be to read an existing codec.
@@ -446,6 +422,7 @@ func getStructCodecLocked(t reflect.Type) (c *structCodec) {
byIndex: make([]structTag, t.NumField()),
byName: make(map[string]int, t.NumField()),
byMeta: make(map[string]int, t.NumField()),
+
problem: errRecursiveStruct, // we'll clear this later if it's not recursive
}
defer func() {

Powered by Google App Engine
This is Rietveld 408576698