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

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

Issue 2048933004: Refactor multiarg, split MGS/PLS. (Closed) Base URL: https://chromium.googlesource.com/external/github.com/luci/gae@master
Patch Set: Rebarse? Created 4 years, 5 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/datastore_test.go ('k') | service/datastore/multiarg.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
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 // specified parameters. 53 // specified parameters.
54 NewKey(kind, stringID string, intID int64, parent *Key) *Key 54 NewKey(kind, stringID string, intID int64, parent *Key) *Key
55 55
56 // NewKeyToks constructs a new key in the current appID/Namespace, using the 56 // NewKeyToks constructs a new key in the current appID/Namespace, using the
57 // specified key tokens. 57 // specified key tokens.
58 NewKeyToks([]KeyTok) *Key 58 NewKeyToks([]KeyTok) *Key
59 59
60 // KeyForObjErr extracts a key from src. 60 // KeyForObjErr extracts a key from src.
61 // 61 //
62 // src must be one of: 62 // src must be one of:
63 » // - *S where S is a struct 63 » // - *S, where S is a struct
64 // - a PropertyLoadSaver 64 // - a PropertyLoadSaver
65 // 65 //
66 // It is expected that the struct exposes the following metadata (as ret rieved 66 // It is expected that the struct exposes the following metadata (as ret rieved
67 // by MetaGetter.GetMeta): 67 // by MetaGetter.GetMeta):
68 // - "key" (type: Key) - The full datastore key to use. Must not be ni l. 68 // - "key" (type: Key) - The full datastore key to use. Must not be ni l.
69 // OR 69 // OR
70 // - "id" (type: int64 or string) - The id of the Key to create 70 // - "id" (type: int64 or string) - The id of the Key to create
71 // - "kind" (optional, type: string) - The kind of the Key to create. If 71 // - "kind" (optional, type: string) - The kind of the Key to create. If
72 // blank or not present, KeyForObjErr will extract the name of the s rc 72 // blank or not present, KeyForObjErr will extract the name of the s rc
73 // object's type. 73 // object's type.
(...skipping 18 matching lines...) Expand all
92 // like nested/buffered transactions as filters. 92 // like nested/buffered transactions as filters.
93 RunInTransaction(f func(c context.Context) error, opts *TransactionOptio ns) error 93 RunInTransaction(f func(c context.Context) error, opts *TransactionOptio ns) error
94 94
95 // Run executes the given query, and calls `cb` for each successfully 95 // Run executes the given query, and calls `cb` for each successfully
96 // retrieved item. 96 // retrieved item.
97 // 97 //
98 // cb is a callback function whose signature is 98 // cb is a callback function whose signature is
99 // func(obj TYPE[, getCursor CursorCB]) [error] 99 // func(obj TYPE[, getCursor CursorCB]) [error]
100 // 100 //
101 // Where TYPE is one of: 101 // Where TYPE is one of:
102 » // - S or *S where S is a struct 102 » // - S or *S, where S is a struct
103 » // - P or *P where *P is a concrete type implementing PropertyLoadSave r 103 » // - P or *P, where *P is a concrete type implementing PropertyLoadSav er
104 // - *Key (implies a keys-only query) 104 // - *Key (implies a keys-only query)
105 // 105 //
106 // If the error is omitted from the signature, this will run until the q uery 106 // If the error is omitted from the signature, this will run until the q uery
107 // returns all its results, or has an error/times out. 107 // returns all its results, or has an error/times out.
108 // 108 //
109 // If error is in the signature, the query will continue as long as the 109 // If error is in the signature, the query will continue as long as the
110 // callback returns nil. If it returns `Stop`, the query will stop and R un 110 // callback returns nil. If it returns `Stop`, the query will stop and R un
111 // will return nil. Otherwise, the query will stop and Run will return t he 111 // will return nil. Otherwise, the query will stop and Run will return t he
112 // user's error. 112 // user's error.
113 // 113 //
114 // Run may also stop on the first datastore error encountered, which can occur 114 // Run may also stop on the first datastore error encountered, which can occur
115 // due to flakiness, timeout, etc. If it encounters such an error, it wi ll 115 // due to flakiness, timeout, etc. If it encounters such an error, it wi ll
116 // be returned. 116 // be returned.
117 Run(q *Query, cb interface{}) error 117 Run(q *Query, cb interface{}) error
118 118
119 // Count executes the given query and returns the number of entries whic h 119 // Count executes the given query and returns the number of entries whic h
120 // match it. 120 // match it.
121 Count(q *Query) (int64, error) 121 Count(q *Query) (int64, error)
122 122
123 // DecodeCursor converts a string returned by a Cursor into a Cursor ins tance. 123 // DecodeCursor converts a string returned by a Cursor into a Cursor ins tance.
124 // It will return an error if the supplied string is not valid, or could not 124 // It will return an error if the supplied string is not valid, or could not
125 // be decoded by the implementation. 125 // be decoded by the implementation.
126 DecodeCursor(string) (Cursor, error) 126 DecodeCursor(string) (Cursor, error)
127 127
128 // GetAll retrieves all of the Query results into dst. 128 // GetAll retrieves all of the Query results into dst.
129 // 129 //
130 // dst must be one of: 130 // dst must be one of:
131 » // - *[]S or *[]*S where S is a struct 131 » // - *[]S or *[]*S, where S is a struct
132 » // - *[]P or *[]*P where *P is a concrete type implementing 132 » // - *[]P or *[]*P, where *P is a concrete type implementing
133 // PropertyLoadSaver 133 // PropertyLoadSaver
134 // - *[]*Key implies a keys-only query. 134 // - *[]*Key implies a keys-only query.
135 GetAll(q *Query, dst interface{}) error 135 GetAll(q *Query, dst interface{}) error
136 136
137 // Exists tests if the supplied objects are present in the datastore. 137 // Exists tests if the supplied objects are present in the datastore.
138 // 138 //
139 // ent must be one of: 139 // ent must be one of:
140 » //» - *S where S is a struct 140 » //» - *S, where S is a struct
141 » //» - *P where *P is a concrete type implementing PropertyLoadSaver 141 » //» - *P, where *P is a concrete type implementing PropertyLoadSaver
142 » //» - []S or []*S where S is a struct 142 » //» - []S or []*S, where S is a struct
143 » //» - []P or []*P where *P is a concrete type implementing PropertyL oadSaver 143 » //» - []P or []*P, where *P is a concrete type implementing Property LoadSaver
144 » //» - []I where i is some interface type. Each element of the slice must 144 » //» - []I, where I is some interface type. Each element of the slice must
145 // be non-nil, and its underlying type must be either *S or *P. 145 // be non-nil, and its underlying type must be either *S or *P.
146 // - *Key, to check a specific key from the datastore. 146 // - *Key, to check a specific key from the datastore.
147 // - []*Key, to check a slice of keys from the datastore. 147 // - []*Key, to check a slice of keys from the datastore.
148 // 148 //
149 // If an error is encountered, the returned error value will depend on t he 149 // If an error is encountered, the returned error value will depend on t he
150 // input arguments. If one argument is supplied, the result will be the 150 // input arguments. If one argument is supplied, the result will be the
151 // encountered error type. If multiple arguments are supplied, the resul t will 151 // encountered error type. If multiple arguments are supplied, the resul t will
152 // be a MultiError whose error index corresponds to the argument in whic h the 152 // be a MultiError whose error index corresponds to the argument in whic h the
153 // error was encountered. 153 // error was encountered.
154 // 154 //
155 // If an ent argument is a slice, its error type will be a MultiError. N ote 155 // If an ent argument is a slice, its error type will be a MultiError. N ote
156 » // that in the scenario where multiple slices are provided, this will re turn a 156 » // that in the scenario, where multiple slices are provided, this will r eturn a
157 // MultiError containing a nested MultiError for each slice argument. 157 // MultiError containing a nested MultiError for each slice argument.
158 Exists(ent ...interface{}) (*ExistsResult, error) 158 Exists(ent ...interface{}) (*ExistsResult, error)
159 159
160 // Does a GetMulti for thes keys and returns true iff they exist. Will o nly 160 // Does a GetMulti for thes keys and returns true iff they exist. Will o nly
161 » // return an error if it's not ErrNoSuchEntity. This is slightly more ef ficient 161 » // return an error if it's not ErrNoSuchEntity. This is slightly more
162 » // than using Get directly, because it uses the underlying RawInterface to 162 » // efficient than using Get directly, because it uses the underlying
163 » // avoid some reflection and copies. 163 » // RawInterface to avoid some reflection and copies.
164 // 164 //
165 // If an error is encountered, the returned error will be a MultiError w hose 165 // If an error is encountered, the returned error will be a MultiError w hose
166 // error index corresponds to the key for which the error was encountere d. 166 // error index corresponds to the key for which the error was encountere d.
167 // 167 //
168 // NOTE: ExistsMulti is obsolete. The vararg-accepting Exists should be used 168 // NOTE: ExistsMulti is obsolete. The vararg-accepting Exists should be used
169 // instead. This is left for backwards compatibility, but will be remove d from 169 // instead. This is left for backwards compatibility, but will be remove d from
170 // this interface at some point in the future. 170 // this interface at some point in the future.
171 ExistsMulti(k []*Key) (BoolList, error) 171 ExistsMulti(k []*Key) (BoolList, error)
172 172
173 // Get retrieves objects from the datastore. 173 // Get retrieves objects from the datastore.
174 // 174 //
175 // Each element in dst must be one of: 175 // Each element in dst must be one of:
176 » //» - *S where S is a struct 176 » //» - *S, where S is a struct
177 » //» - *P where *P is a concrete type implementing PropertyLoadSaver 177 » //» - *P, where *P is a concrete type implementing PropertyLoadSaver
178 » //» - []S or []*S where S is a struct 178 » //» - []S or []*S, where S is a struct
179 » //» - []P or []*P where *P is a concrete type implementing PropertyL oadSaver 179 » //» - []P or []*P, where *P is a concrete type implementing Property LoadSaver
180 » //» - []I where I is some interface type. Each element of the slice must 180 » //» - []I, where I is some interface type. Each element of the slice must
181 // be non-nil, and its underlying type must be either *S or *P. 181 // be non-nil, and its underlying type must be either *S or *P.
182 // 182 //
183 // If an error is encountered, the returned error value will depend on t he 183 // If an error is encountered, the returned error value will depend on t he
184 // input arguments. If one argument is supplied, the result will be the 184 // input arguments. If one argument is supplied, the result will be the
185 // encountered error type. If multiple arguments are supplied, the resul t will 185 // encountered error type. If multiple arguments are supplied, the resul t will
186 // be a MultiError whose error index corresponds to the argument in whic h the 186 // be a MultiError whose error index corresponds to the argument in whic h the
187 // error was encountered. 187 // error was encountered.
188 // 188 //
189 // If a dst argument is a slice, its error type will be a MultiError. No te 189 // If a dst argument is a slice, its error type will be a MultiError. No te
190 // that in the scenario where multiple slices are provided, this will re turn a 190 // that in the scenario where multiple slices are provided, this will re turn a
191 // MultiError containing a nested MultiError for each slice argument. 191 // MultiError containing a nested MultiError for each slice argument.
192 Get(dst ...interface{}) error 192 Get(dst ...interface{}) error
193 193
194 // GetMulti retrieves items from the datastore. 194 // GetMulti retrieves items from the datastore.
195 // 195 //
196 // dst must be one of: 196 // dst must be one of:
197 » // - []S or []*S where S is a struct 197 » // - []S or []*S, where S is a struct
198 » // - []P or []*P where *P is a concrete type implementing PropertyLoad Saver 198 » // - []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 mus t 199 » // - []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. 200 // be non-nil, and its underlying type must be either *S or *P.
201 // 201 //
202 // NOTE: GetMulti is obsolete. The vararg-accepting Get should be used 202 // 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 203 // instead. This is left for backwards compatibility, but will be remove d from
204 // this interface at some point in the future. 204 // this interface at some point in the future.
205 GetMulti(dst interface{}) error 205 GetMulti(dst interface{}) error
206 206
207 // Put inserts a single object into the datastore 207 // Put inserts a single object into the datastore
208 // 208 //
209 // src must be one of: 209 // src must be one of:
210 » //» - *S where S is a struct 210 » //» - *S, where S is a struct
211 » //» - *P where *P is a concrete type implementing PropertyLoadSaver 211 » //» - *P, where *P is a concrete type implementing PropertyLoadSaver
212 » //» - []S or []*S where S is a struct 212 » //» - []S or []*S, where S is a struct
213 » //» - []P or []*P where *P is a concrete type implementing PropertyL oadSaver 213 » //» - []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 214 » //» - []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. 215 // be non-nil, and its underlying type must be either *S or *P.
216 // 216 //
217 // A *Key will be extracted from src via KeyForObj. If 217 // A *Key will be extracted from src via KeyForObj. If
218 // extractedKey.Incomplete() is true, then Put will write the resolved ( i.e. 218 // extractedKey.Incomplete() is true, then Put will write the resolved ( i.e.
219 // automatic datastore-populated) *Key back to src. 219 // automatic datastore-populated) *Key back to src.
220 // 220 //
221 // If an error is encountered, the returned error value will depend on t he 221 // If an error is encountered, the returned error value will depend on t he
222 // input arguments. If one argument is supplied, the result will be the 222 // input arguments. If one argument is supplied, the result will be the
223 // encountered error type. If multiple arguments are supplied, the resul t will 223 // encountered error type. If multiple arguments are supplied, the resul t will
224 // be a MultiError whose error index corresponds to the argument in whic h the 224 // be a MultiError whose error index corresponds to the argument in whic h the
225 // error was encountered. 225 // error was encountered.
226 // 226 //
227 // If a src argument is a slice, its error type will be a MultiError. No te 227 // If a src argument is a slice, its error type will be a MultiError. No te
228 // that in the scenario where multiple slices are provided, this will re turn a 228 // that in the scenario where multiple slices are provided, this will re turn a
229 // MultiError containing a nested MultiError for each slice argument. 229 // MultiError containing a nested MultiError for each slice argument.
230 Put(src ...interface{}) error 230 Put(src ...interface{}) error
231 231
232 // PutMulti writes items to the datastore. 232 // PutMulti writes items to the datastore.
233 // 233 //
234 // src must be one of: 234 // src must be one of:
235 » //» - []S or []*S where S is a struct 235 » //» - []S or []*S, where S is a struct
236 » //» - []P or []*P where *P is a concrete type implementing PropertyL oadSaver 236 » //» - []P or []*P, where *P is a concrete type implementing Property LoadSaver
237 » //» - []I where i is some interface type. Each element of the slice must 237 » //» - []I, where I is some interface type. Each element of the slice must
238 // be non-nil, and its underlying type must be either *S or *P. 238 // be non-nil, and its underlying type must be either *S or *P.
239 // 239 //
240 // If items in src resolve to Incomplete keys, PutMulti will write the 240 // If items in src resolve to Incomplete keys, PutMulti will write the
241 // resolved keys back to the items in src. 241 // resolved keys back to the items in src.
242 // 242 //
243 // NOTE: PutMulti is obsolete. The vararg-accepting Put should be used 243 // NOTE: PutMulti is obsolete. The vararg-accepting Put should be used
244 // instead. This is left for backwards compatibility, but will be remove d from 244 // instead. This is left for backwards compatibility, but will be remove d from
245 // this interface at some point in the future. 245 // this interface at some point in the future.
246 PutMulti(src interface{}) error 246 PutMulti(src interface{}) error
247 247
248 // Delete removes the supplied entities from the datastore. 248 // Delete removes the supplied entities from the datastore.
249 // 249 //
250 // ent must be one of: 250 // ent must be one of:
251 » //» - *S where S is a struct 251 » //» - *S, where S is a struct
252 » //» - *P where *P is a concrete type implementing PropertyLoadSaver 252 » //» - *P, where *P is a concrete type implementing PropertyLoadSaver
253 » //» - []S or []*S where S is a struct 253 » //» - []S or []*S, where S is a struct
254 » //» - []P or []*P where *P is a concrete type implementing PropertyL oadSaver 254 » //» - []P or []*P, where *P is a concrete type implementing Property LoadSaver
255 » //» - []I where i is some interface type. Each element of the slice must 255 » //» - []I, where I is some interface type. Each element of the slice must
256 // be non-nil, and its underlying type must be either *S or *P. 256 // be non-nil, and its underlying type must be either *S or *P.
257 // - *Key, to remove a specific key from the datastore. 257 // - *Key, to remove a specific key from the datastore.
258 // - []*Key, to remove a slice of keys from the datastore. 258 // - []*Key, to remove a slice of keys from the datastore.
259 // 259 //
260 // If an error is encountered, the returned error value will depend on t he 260 // If an error is encountered, the returned error value will depend on t he
261 // input arguments. If one argument is supplied, the result will be the 261 // input arguments. If one argument is supplied, the result will be the
262 // encountered error type. If multiple arguments are supplied, the resul t will 262 // encountered error type. If multiple arguments are supplied, the resul t will
263 // be a MultiError whose error index corresponds to the argument in whic h the 263 // be a MultiError whose error index corresponds to the argument in whic h the
264 // error was encountered. 264 // error was encountered.
265 // 265 //
(...skipping 14 matching lines...) Expand all
280 280
281 // Testable returns the Testable interface for the implementation, or ni l if 281 // Testable returns the Testable interface for the implementation, or ni l if
282 // there is none. 282 // there is none.
283 Testable() Testable 283 Testable() Testable
284 284
285 // Raw returns the underlying RawInterface. The Interface and RawInterfa ce may 285 // 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 286 // be used interchangably; there's no danger of interleaving access to t he
287 // datastore via the two. 287 // datastore via the two.
288 Raw() RawInterface 288 Raw() RawInterface
289 } 289 }
OLDNEW
« 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