OLD | NEW |
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 "golang.org/x/net/context" | 8 "golang.org/x/net/context" |
9 ) | 9 ) |
10 | 10 |
11 // RunCB is the callback signature provided to Interface.Run | |
12 // | |
13 // - obj is an object as specified by the proto argument of Run | |
14 // - getCursor can be invoked to obtain the current cursor. | |
15 // | |
16 // Return true to continue iterating through the query results, or false to stop
. | |
17 type RunCB func(obj interface{}, getCursor func() (Cursor, error)) bool | |
18 | |
19 // Interface is the 'user-friendly' interface to access the current filtered | 11 // Interface is the 'user-friendly' interface to access the current filtered |
20 // datastore service implementation. | 12 // datastore service implementation. |
21 // | 13 // |
22 // Note that in exchange for userfriendliness, this interface ends up doing | 14 // Note that in exchange for userfriendliness, this interface ends up doing |
23 // a lot of reflection. | 15 // a lot of reflection. |
24 // | 16 // |
25 // Methods taking 'interface{}' objects describe what a valid type for that | 17 // Methods taking 'interface{}' objects describe what a valid type for that |
26 // interface are in the comments. | 18 // interface are in the comments. |
27 // | 19 // |
28 // Struct objects passed in will be converted to PropertyLoadSaver interfaces | 20 // Struct objects passed in will be converted to PropertyLoadSaver interfaces |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 // datastore. | 65 // datastore. |
74 // | 66 // |
75 // Note that the behavior of transactions may change depending on what f
ilters | 67 // Note that the behavior of transactions may change depending on what f
ilters |
76 // have been installed. It's possible that we'll end up implementing thi
ngs | 68 // have been installed. It's possible that we'll end up implementing thi
ngs |
77 // like nested/buffered transactions as filters. | 69 // like nested/buffered transactions as filters. |
78 RunInTransaction(f func(c context.Context) error, opts *TransactionOptio
ns) error | 70 RunInTransaction(f func(c context.Context) error, opts *TransactionOptio
ns) error |
79 | 71 |
80 // Run executes the given query, and calls `cb` for each successfully | 72 // Run executes the given query, and calls `cb` for each successfully |
81 // retrieved item. | 73 // retrieved item. |
82 // | 74 // |
83 » // proto is a prototype of the objects which will be passed to the callb
ack. | 75 » // cb is a callback function whose signature is |
84 » // It will be used solely for type information, and the actual proto obj
ect | 76 » // func(obj TYPE, getCursor CursorCB) bool |
85 » // may be zero/nil. It must be of the form: | 77 » // |
| 78 » // Where TYPE is one of: |
86 // - S or *S where S is a struct | 79 // - S or *S where S is a struct |
87 // - P or *P where *P is a concrete type implementing PropertyLoadSave
r | 80 // - P or *P where *P is a concrete type implementing PropertyLoadSave
r |
88 » // - *Key implies a keys-only query (and cb will be invoked with Key o
bjects) | 81 » // - Key (implies a keys-only query) |
89 » // Run will create a new, populated instance of proto for each call of | 82 » // |
90 » // cb. Run stops on the first error encountered. | 83 » // Run stops on the first error encountered. |
91 » Run(q Query, proto interface{}, cb RunCB) error | 84 » Run(q Query, cb interface{}) error |
92 | 85 |
93 // GetAll retrieves all of the Query results into dst. | 86 // GetAll retrieves all of the Query results into dst. |
94 // | 87 // |
95 // dst must be one of: | 88 // dst must be one of: |
96 // - *[]S or *[]*S where S is a struct | 89 // - *[]S or *[]*S where S is a struct |
97 // - *[]P or *[]*P where *P is a concrete type implementing PropertyLo
adSaver | 90 // - *[]P or *[]*P where *P is a concrete type implementing PropertyLo
adSaver |
98 // - *[]Key implies a keys-only query. | 91 // - *[]Key implies a keys-only query. |
99 GetAll(q Query, dst interface{}) error | 92 GetAll(q Query, dst interface{}) error |
100 | 93 |
101 // Get retrieves a single object from the datastore | 94 // Get retrieves a single object from the datastore |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 PutMulti(src interface{}) error | 134 PutMulti(src interface{}) error |
142 | 135 |
143 // DeleteMulti removes items from the datastore. | 136 // DeleteMulti removes items from the datastore. |
144 DeleteMulti(keys []Key) error | 137 DeleteMulti(keys []Key) error |
145 | 138 |
146 // Raw returns the underlying RawInterface. The Interface and RawInterfa
ce may | 139 // Raw returns the underlying RawInterface. The Interface and RawInterfa
ce may |
147 // be used interchangably; there's no danger of interleaving access to t
he | 140 // be used interchangably; there's no danger of interleaving access to t
he |
148 // datastore via the two. | 141 // datastore via the two. |
149 Raw() RawInterface | 142 Raw() RawInterface |
150 } | 143 } |
OLD | NEW |