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

Unified Diff: service/datastore/interface.go

Issue 2011773002: datastore: variadic Get, Put, Exists, Delete. (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/gae@master
Patch Set: s/chn/chan/ Created 4 years, 7 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
« no previous file with comments | « service/datastore/datastore_test.go ('k') | service/datastore/multiarg.go » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: service/datastore/interface.go
diff --git a/service/datastore/interface.go b/service/datastore/interface.go
index c70dd53c54095804b6f88826e452f27f4707a14a..ff5cf7293818f1616b87ef803e6dd455b00c3596 100644
--- a/service/datastore/interface.go
+++ b/service/datastore/interface.go
@@ -8,30 +8,6 @@ import (
"golang.org/x/net/context"
)
-// BoolList is a convenience wrapper for []bool that provides summary methods
-// for working with the list in aggregate.
-type BoolList []bool
-
-// All returns true iff all of the booleans in this list are true.
-func (bl BoolList) All() bool {
- for _, b := range bl {
- if !b {
- return false
- }
- }
- return true
-}
-
-// Any returns true iff any of the booleans in this list are true.
-func (bl BoolList) Any() bool {
- for _, b := range bl {
- if b {
- return true
- }
- }
- return false
-}
-
// Interface is the 'user-friendly' interface to access the current filtered
// datastore service implementation.
//
@@ -158,38 +134,62 @@ type Interface interface {
// - *[]*Key implies a keys-only query.
GetAll(q *Query, dst interface{}) error
- // Does a Get for this key and returns true iff it exists. Will only return
- // an error if it's not ErrNoSuchEntity. This is slightly more efficient
- // than using Get directly, because it uses the underlying RawInterface to
- // avoid some reflection and copies.
- Exists(k *Key) (bool, error)
+ // Exists tests if the supplied objects are present in the datastore.
+ //
+ // ent must be one of:
+ // - *S where S is a struct
+ // - *P where *P is a concrete type implementing PropertyLoadSaver
+ // - []S or []*S where S is a struct
+ // - []P or []*P where *P is a concrete type implementing PropertyLoadSaver
+ // - []I where i is some interface type. Each element of the slice must
+ // be non-nil, and its underlying type must be either *S or *P.
+ // - *Key, to check a specific key from the datastore.
+ // - []*Key, to check a slice of keys from the datastore.
+ //
+ // If an error is encountered, the returned error value will depend on the
+ // input arguments. If one argument is supplied, the result will be the
+ // encountered error type. If multiple arguments are supplied, the result will
+ // be a MultiError whose error index corresponds to the argument in which the
+ // error was encountered.
+ //
+ // If an ent argument is a slice, its error type will be a MultiError. Note
+ // that in the scenario where multiple slices are provided, this will return a
+ // MultiError containing a nested MultiError for each slice argument.
+ Exists(ent ...interface{}) (*ExistsResult, error)
// Does a GetMulti for thes keys and returns true iff they exist. Will only
// return an error if it's not ErrNoSuchEntity. This is slightly more efficient
// than using Get directly, because it uses the underlying RawInterface to
// avoid some reflection and copies.
+ //
+ // If an error is encountered, the returned error will be a MultiError whose
+ // error index corresponds to the key for which the error was encountered.
+ //
+ // NOTE: ExistsMulti is obsolete. The vararg-accepting Exists should be used
+ // instead. This is left for backwards compatibility, but will be removed from
+ // this interface at some point in the future.
ExistsMulti(k []*Key) (BoolList, error)
- // Get retrieves a single object from the datastore
+ // Get retrieves objects from the datastore.
//
- // dst must be one of:
- // - *S where S is a struct
- // - *P where *P is a concrete type implementing PropertyLoadSaver
- Get(dst interface{}) error
-
- // Put inserts a single object into the datastore
+ // Each element in dst must be one of:
+ // - *S where S is a struct
+ // - *P where *P is a concrete type implementing PropertyLoadSaver
+ // - []S or []*S where S is a struct
+ // - []P or []*P where *P is a concrete type implementing PropertyLoadSaver
+ // - []I where I is some interface type. Each element of the slice must
+ // be non-nil, and its underlying type must be either *S or *P.
//
- // src must be one of:
- // - *S where S is a struct
- // - *P where *P is a concrete type implementing PropertyLoadSaver
+ // If an error is encountered, the returned error value will depend on the
+ // input arguments. If one argument is supplied, the result will be the
+ // encountered error type. If multiple arguments are supplied, the result will
+ // be a MultiError whose error index corresponds to the argument in which the
+ // error was encountered.
//
- // A *Key will be extracted from src via KeyForObj. If
- // extractedKey.Incomplete() is true, then Put will write the resolved (i.e.
- // automatic datastore-populated) *Key back to src.
- Put(src interface{}) error
-
- // Delete removes an item from the datastore.
- Delete(key *Key) error
+ // If a dst argument is a slice, its error type will be a MultiError. Note
+ // that in the scenario where multiple slices are provided, this will return a
+ // MultiError containing a nested MultiError for each slice argument.
+ Get(dst ...interface{}) error
// GetMulti retrieves items from the datastore.
//
@@ -198,21 +198,84 @@ type Interface interface {
// - []P or []*P where *P is a concrete type implementing PropertyLoadSaver
// - []I where I is some interface type. Each element of the slice must
// be non-nil, and its underlying type must be either *S or *P.
+ //
+ // NOTE: GetMulti is obsolete. The vararg-accepting Get should be used
+ // instead. This is left for backwards compatibility, but will be removed from
+ // this interface at some point in the future.
GetMulti(dst interface{}) error
+ // Put inserts a single object into the datastore
+ //
+ // src must be one of:
+ // - *S where S is a struct
+ // - *P where *P is a concrete type implementing PropertyLoadSaver
+ // - []S or []*S where S is a struct
+ // - []P or []*P where *P is a concrete type implementing PropertyLoadSaver
+ // - []I where i is some interface type. Each element of the slice must
+ // be non-nil, and its underlying type must be either *S or *P.
+ //
+ // A *Key will be extracted from src via KeyForObj. If
+ // extractedKey.Incomplete() is true, then Put will write the resolved (i.e.
+ // automatic datastore-populated) *Key back to src.
+ //
+ // If an error is encountered, the returned error value will depend on the
+ // input arguments. If one argument is supplied, the result will be the
+ // encountered error type. If multiple arguments are supplied, the result will
+ // be a MultiError whose error index corresponds to the argument in which the
+ // error was encountered.
+ //
+ // If a src argument is a slice, its error type will be a MultiError. Note
+ // that in the scenario where multiple slices are provided, this will return a
+ // MultiError containing a nested MultiError for each slice argument.
+ Put(src ...interface{}) error
+
// PutMulti writes items to the datastore.
//
// src must be one of:
- // - []S or []*S where S is a struct
- // - []P or []*P where *P is a concrete type implementing PropertyLoadSaver
- // - []I where i is some interface type. Each elemet of the slice must
- // be non-nil, and its underlying type must be either *S or *P.
+ // - []S or []*S where S is a struct
+ // - []P or []*P where *P is a concrete type implementing PropertyLoadSaver
+ // - []I where i is some interface type. Each element of the slice must
+ // be non-nil, and its underlying type must be either *S or *P.
//
// If items in src resolve to Incomplete keys, PutMulti will write the
// resolved keys back to the items in src.
+ //
+ // NOTE: PutMulti is obsolete. The vararg-accepting Put should be used
+ // instead. This is left for backwards compatibility, but will be removed from
+ // this interface at some point in the future.
PutMulti(src interface{}) error
- // DeleteMulti removes items from the datastore.
+ // Delete removes the supplied entities from the datastore.
+ //
+ // ent must be one of:
+ // - *S where S is a struct
+ // - *P where *P is a concrete type implementing PropertyLoadSaver
+ // - []S or []*S where S is a struct
+ // - []P or []*P where *P is a concrete type implementing PropertyLoadSaver
+ // - []I where i is some interface type. Each element of the slice must
+ // be non-nil, and its underlying type must be either *S or *P.
+ // - *Key, to remove a specific key from the datastore.
+ // - []*Key, to remove a slice of keys from the datastore.
+ //
+ // If an error is encountered, the returned error value will depend on the
+ // input arguments. If one argument is supplied, the result will be the
+ // encountered error type. If multiple arguments are supplied, the result will
+ // be a MultiError whose error index corresponds to the argument in which the
+ // error was encountered.
+ //
+ // If an ent argument is a slice, its error type will be a MultiError. Note
+ // that in the scenario where multiple slices are provided, this will return a
+ // MultiError containing a nested MultiError for each slice argument.
+ Delete(ent ...interface{}) error
+
+ // DeleteMulti removes keys from the datastore.
+ //
+ // If an error is encountered, the returned error will be a MultiError whose
+ // error index corresponds to the key for which the error was encountered.
+ //
+ // NOTE: DeleteMulti is obsolete. The vararg-accepting Delete should be used
+ // instead. This is left for backwards compatibility, but will be removed from
+ // this interface at some point in the future.
DeleteMulti(keys []*Key) error
// Testable returns the Testable interface for the implementation, or nil if
« no previous file with comments | « service/datastore/datastore_test.go ('k') | service/datastore/multiarg.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698