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

Side by Side Diff: service/datastore/properties.go

Issue 1269113005: A transparent cache for datastore, backed by memcache. (Closed) Base URL: https://github.com/luci/gae.git@add_meta
Patch Set: Created 5 years, 4 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package datastore 5 package datastore
6 6
7 import ( 7 import (
8 "errors" 8 "errors"
9 "fmt" 9 "fmt"
10 "math" 10 "math"
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 } 407 }
408 408
409 // Save implements PropertyLoadSaver.Save by returning a copy of the 409 // Save implements PropertyLoadSaver.Save by returning a copy of the
410 // current map data. 410 // current map data.
411 func (pm PropertyMap) Save(withMeta bool) (PropertyMap, error) { 411 func (pm PropertyMap) Save(withMeta bool) (PropertyMap, error) {
412 if len(pm) == 0 { 412 if len(pm) == 0 {
413 return PropertyMap{}, nil 413 return PropertyMap{}, nil
414 } 414 }
415 ret := make(PropertyMap, len(pm)) 415 ret := make(PropertyMap, len(pm))
416 for k, v := range pm { 416 for k, v := range pm {
417 » » if withMeta || len(k) == 0 || k[0] != '$' { 417 » » if withMeta || !isMetaKey(k) {
418 ret[k] = append(ret[k], v...) 418 ret[k] = append(ret[k], v...)
419 } 419 }
420 } 420 }
421 return ret, nil 421 return ret, nil
422 } 422 }
423 423
424 // GetMeta implements PropertyLoadSaver.GetMeta, and returns the current value 424 // GetMeta implements PropertyLoadSaver.GetMeta, and returns the current value
425 // associated with the metadata key. It may return ErrMetaFieldUnset if the 425 // associated with the metadata key. It may return ErrMetaFieldUnset if the
426 // key doesn't exist. 426 // key doesn't exist.
427 func (pm PropertyMap) GetMeta(key string) (interface{}, error) { 427 func (pm PropertyMap) GetMeta(key string) (interface{}, error) {
(...skipping 15 matching lines...) Expand all
443 return err 443 return err
444 } 444 }
445 pm["$"+key] = []Property{prop} 445 pm["$"+key] = []Property{prop}
446 return nil 446 return nil
447 } 447 }
448 448
449 // Problem implements PropertyLoadSaver.Problem. It ALWAYS returns nil. 449 // Problem implements PropertyLoadSaver.Problem. It ALWAYS returns nil.
450 func (pm PropertyMap) Problem() error { 450 func (pm PropertyMap) Problem() error {
451 return nil 451 return nil
452 } 452 }
453
454 // DataLen returns the number of non-metadata rows in this PropertyMap.
455 func (pm PropertyMap) DataLen() int {
456 ret := 0
457 for k := range pm {
458 if isMetaKey(k) {
459 continue
460 }
461 ret++
462 }
463 return ret
464 }
465
466 func isMetaKey(k string) bool {
467 // empty counts as a metakey since it's not a valid data key, but it's
468 // not really a valid metakey either.
469 return k == "" || k[0] == '$'
470 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698