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

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

Issue 2007123002: datastore: Update AllocateIDs to take keys. (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/gae@master
Patch Set: Rebase, comments. Created 4 years, 6 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
« no previous file with comments | « service/datastore/finalized_query.go ('k') | service/datastore/key.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The LUCI Authors. All rights reserved. 1 // Copyright 2015 The LUCI Authors. All rights reserved.
2 // Use of this source code is governed under the Apache License, Version 2.0 2 // Use of this source code is governed under the Apache License, Version 2.0
3 // that can be found in the LICENSE file. 3 // that can be found in the LICENSE file.
4 4
5 package datastore 5 package datastore
6 6
7 import ( 7 import (
8 "golang.org/x/net/context" 8 "golang.org/x/net/context"
9 ) 9 )
10 10
11 // Interface is the 'user-friendly' interface to access the current filtered 11 // Interface is the 'user-friendly' interface to access the current filtered
12 // datastore service implementation. 12 // datastore service implementation.
13 // 13 //
14 // Note that in exchange for userfriendliness, this interface ends up doing 14 // Note that in exchange for userfriendliness, this interface ends up doing
15 // a lot of reflection. 15 // a lot of reflection.
16 // 16 //
17 // Methods taking 'interface{}' objects describe what a valid type for that 17 // Methods taking 'interface{}' objects describe what a valid type for that
18 // interface are in the comments. 18 // interface are in the comments.
19 // 19 //
20 // Struct objects passed in will be converted to PropertyLoadSaver interfaces 20 // Struct objects passed in will be converted to PropertyLoadSaver interfaces
21 // using this package's GetPLS function. 21 // using this package's GetPLS function.
22 type Interface interface { 22 type Interface interface {
23 // AllocateIDs allows you to allocate IDs from the datastore without put ting 23 // AllocateIDs allows you to allocate IDs from the datastore without put ting
24 » // any data. `incomplete` must be a PartialValid Key. If there's no erro r, 24 » // any data.
25 » // a contiguous block of IDs of n length starting at `start` will be res erved 25 » //
26 » // indefinitely for the user application code for use in new keys. The 26 » // A partial valid key will be constructed from each entity's kind and p arent,
27 » // appengine automatic ID generator will never automatically assign thes e IDs 27 » // if present. An allocation will then be performed against the datastor e for
28 » // for Keys of this type. 28 » // each key, and the partial key will be populated with a unique integer ID.
29 » AllocateIDs(incomplete *Key, n int) (start int64, err error) 29 » // The resulting keys will be applied to their objects using PopulateKey . If
30 » // successful, any existing ID will be destroyed.
31 » //
32 » // If the object is supplied that cannot accept an integer key, this met hod
33 » // will panic.
34 » //
35 » // ent must be one of:
36 » //» - *S where S is a struct
37 » //» - *P where *P is a concrete type implementing PropertyLoadSaver
38 » //» - []S or []*S where S is a struct
39 » //» - []P or []*P where *P is a concrete type implementing PropertyL oadSaver
40 » //» - []I where i is some interface type. Each element of the slice must
41 » //» be non-nil, and its underlying type must be either *S or *P.
42 » //» - []*Key, to populate a slice of partial-valid keys.
43 » //
44 » // If an error is encountered, the returned error value will depend on t he
45 » // input arguments. If one argument is supplied, the result will be the
46 » // encountered error type. If multiple arguments are supplied, the resul t will
47 » // be a MultiError whose error index corresponds to the argument in whic h the
48 » // error was encountered.
49 » //
50 » // If an ent argument is a slice, its error type will be a MultiError. N ote
51 » // that in the scenario where multiple slices are provided, this will re turn a
52 » // MultiError containing a nested MultiError for each slice argument.
53 » AllocateIDs(ent ...interface{}) error
30 54
31 // KeyForObj extracts a key from src. 55 // KeyForObj extracts a key from src.
32 // 56 //
33 // It is the same as KeyForObjErr, except that if KeyForObjErr would hav e 57 // It is the same as KeyForObjErr, except that if KeyForObjErr would hav e
34 // returned an error, this method panics. It's safe to use if you know t hat 58 // returned an error, this method panics. It's safe to use if you know t hat
35 // src statically meets the metadata constraints described by KeyForObjE rr. 59 // src statically meets the metadata constraints described by KeyForObjE rr.
36 KeyForObj(src interface{}) *Key 60 KeyForObj(src interface{}) *Key
37 61
38 // MakeKey is a convenience method for manufacturing a *Key. It should o nly be 62 // MakeKey is a convenience method for manufacturing a *Key. It should o nly be
39 // used when elems... is known statically (e.g. in the code) to be corre ct. 63 // used when elems... is known statically (e.g. in the code) to be corre ct.
40 // 64 //
41 // elems is pairs of (string, string|int|int32|int64) pairs, which corre spond 65 // elems is pairs of (string, string|int|int32|int64) pairs, which corre spond
42 // to Kind/id pairs. Example: 66 // to Kind/id pairs. Example:
43 // dstore.MakeKey("Parent", 1, "Child", "id") 67 // dstore.MakeKey("Parent", 1, "Child", "id")
44 // 68 //
45 // Would create the key: 69 // Would create the key:
46 // <current appID>:<current Namespace>:/Parent,1/Child,id 70 // <current appID>:<current Namespace>:/Parent,1/Child,id
47 // 71 //
48 // If elems is not parsable (e.g. wrong length, wrong types, etc.) this method 72 // If elems is not parsable (e.g. wrong length, wrong types, etc.) this method
49 // will panic. 73 // will panic.
50 MakeKey(elems ...interface{}) *Key 74 MakeKey(elems ...interface{}) *Key
51 75
52 // NewKey constructs a new key in the current appID/Namespace, using the 76 // NewKey constructs a new key in the current appID/Namespace, using the
53 // specified parameters. 77 // specified parameters.
54 NewKey(kind, stringID string, intID int64, parent *Key) *Key 78 NewKey(kind, stringID string, intID int64, parent *Key) *Key
55 79
80 // NewIncompleteKeys allocates count incomplete keys sharing the same ki nd and
81 // parent. It is useful as input to AllocateIDs.
82 NewIncompleteKeys(count int, kind string, parent *Key) []*Key
83
56 // NewKeyToks constructs a new key in the current appID/Namespace, using the 84 // NewKeyToks constructs a new key in the current appID/Namespace, using the
57 // specified key tokens. 85 // specified key tokens.
58 NewKeyToks([]KeyTok) *Key 86 NewKeyToks([]KeyTok) *Key
59 87
60 // KeyForObjErr extracts a key from src. 88 // KeyForObjErr extracts a key from src.
61 // 89 //
62 // src must be one of: 90 // src must be one of:
63 // - *S, where S is a struct 91 // - *S, where S is a struct
64 // - a PropertyLoadSaver 92 // - a PropertyLoadSaver
65 // 93 //
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 // - []S or []*S, where S is a struct 225 // - []S or []*S, where S is a struct
198 // - []P or []*P, where *P is a concrete type implementing PropertyLoa dSaver 226 // - []P or []*P, where *P is a concrete type implementing PropertyLoa dSaver
199 // - []I, where I is some interface type. Each element of the slice mu st 227 // - []I, where I is some interface type. Each element of the slice mu st
200 // be non-nil, and its underlying type must be either *S or *P. 228 // be non-nil, and its underlying type must be either *S or *P.
201 // 229 //
202 // NOTE: GetMulti is obsolete. The vararg-accepting Get should be used 230 // NOTE: GetMulti is obsolete. The vararg-accepting Get should be used
203 // instead. This is left for backwards compatibility, but will be remove d from 231 // instead. This is left for backwards compatibility, but will be remove d from
204 // this interface at some point in the future. 232 // this interface at some point in the future.
205 GetMulti(dst interface{}) error 233 GetMulti(dst interface{}) error
206 234
207 » // Put inserts a single object into the datastore 235 » // Put writes objects into the datastore.
208 // 236 //
209 // src must be one of: 237 // src must be one of:
210 // - *S, where S is a struct 238 // - *S, where S is a struct
211 // - *P, where *P is a concrete type implementing PropertyLoadSaver 239 // - *P, where *P is a concrete type implementing PropertyLoadSaver
212 // - []S or []*S, where S is a struct 240 // - []S or []*S, where S is a struct
213 // - []P or []*P, where *P is a concrete type implementing Property LoadSaver 241 // - []P or []*P, where *P is a concrete type implementing Property LoadSaver
214 // - []I, where I is some interface type. Each element of the slice must 242 // - []I, where I is some interface type. Each element of the slice must
215 // be non-nil, and its underlying type must be either *S or *P. 243 // be non-nil, and its underlying type must be either *S or *P.
216 // 244 //
217 // A *Key will be extracted from src via KeyForObj. If 245 // A *Key will be extracted from src via KeyForObj. If
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 308
281 // Testable returns the Testable interface for the implementation, or ni l if 309 // Testable returns the Testable interface for the implementation, or ni l if
282 // there is none. 310 // there is none.
283 Testable() Testable 311 Testable() Testable
284 312
285 // Raw returns the underlying RawInterface. The Interface and RawInterfa ce may 313 // Raw returns the underlying RawInterface. The Interface and RawInterfa ce may
286 // be used interchangably; there's no danger of interleaving access to t he 314 // be used interchangably; there's no danger of interleaving access to t he
287 // datastore via the two. 315 // datastore via the two.
288 Raw() RawInterface 316 Raw() RawInterface
289 } 317 }
OLDNEW
« no previous file with comments | « service/datastore/finalized_query.go ('k') | service/datastore/key.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698