| 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 gae | 5 package gae |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "fmt" | 8 "fmt" |
| 9 | 9 |
| 10 "golang.org/x/net/context" | 10 "golang.org/x/net/context" |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 Kind string | 31 Kind string |
| 32 IntID int64 | 32 IntID int64 |
| 33 StringID string | 33 StringID string |
| 34 } | 34 } |
| 35 | 35 |
| 36 // DSCursor wraps datastore.Cursor. | 36 // DSCursor wraps datastore.Cursor. |
| 37 type DSCursor interface { | 37 type DSCursor interface { |
| 38 fmt.Stringer | 38 fmt.Stringer |
| 39 } | 39 } |
| 40 | 40 |
| 41 // DSIterator wraps datastore.Iterator. | |
| 42 type DSIterator interface { | |
| 43 Cursor() (DSCursor, error) | |
| 44 Next(dst interface{}) (DSKey, error) | |
| 45 } | |
| 46 | |
| 47 // DSQuery wraps datastore.Query. | 41 // DSQuery wraps datastore.Query. |
| 48 type DSQuery interface { | 42 type DSQuery interface { |
| 49 Ancestor(ancestor DSKey) DSQuery | 43 Ancestor(ancestor DSKey) DSQuery |
| 50 Distinct() DSQuery | 44 Distinct() DSQuery |
| 51 End(c DSCursor) DSQuery | 45 End(c DSCursor) DSQuery |
| 52 EventualConsistency() DSQuery | 46 EventualConsistency() DSQuery |
| 53 Filter(filterStr string, value interface{}) DSQuery | 47 Filter(filterStr string, value interface{}) DSQuery |
| 54 KeysOnly() DSQuery | 48 KeysOnly() DSQuery |
| 55 Limit(limit int) DSQuery | 49 Limit(limit int) DSQuery |
| 56 Offset(offset int) DSQuery | 50 Offset(offset int) DSQuery |
| 57 Order(fieldName string) DSQuery | 51 Order(fieldName string) DSQuery |
| 58 Project(fieldNames ...string) DSQuery | 52 Project(fieldNames ...string) DSQuery |
| 59 Start(c DSCursor) DSQuery | 53 Start(c DSCursor) DSQuery |
| 60 } | 54 } |
| 61 | 55 |
| 62 // CommonDatastore is the interface for the methods which are common between | 56 // CommonDatastore is the interface for the methods which are common between |
| 63 // Datastore and RawDatastore. | 57 // helper.Datastore and RawDatastore. |
| 64 type CommonDatastore interface { | 58 type CommonDatastore interface { |
| 65 NewKey(kind, stringID string, intID int64, parent DSKey) DSKey | 59 NewKey(kind, stringID string, intID int64, parent DSKey) DSKey |
| 66 DecodeKey(encoded string) (DSKey, error) | 60 DecodeKey(encoded string) (DSKey, error) |
| 67 | 61 |
| 68 NewQuery(kind string) DSQuery | 62 NewQuery(kind string) DSQuery |
| 69 Run(q DSQuery) DSIterator | |
| 70 GetAll(q DSQuery, dst interface{}) ([]DSKey, error) | |
| 71 Count(q DSQuery) (int, error) | 63 Count(q DSQuery) (int, error) |
| 72 | 64 |
| 73 RunInTransaction(f func(c context.Context) error, opts *DSTransactionOpt
ions) error | 65 RunInTransaction(f func(c context.Context) error, opts *DSTransactionOpt
ions) error |
| 74 } | 66 } |
| 75 | 67 |
| 76 // RawDatastore implements the datastore functionality as described by | 68 // RDSIterator wraps datastore.Iterator. |
| 77 // the raw appengine documentation. No key inference occurs, nor does any | 69 type RDSIterator interface { |
| 78 // caching. See Datastore for a nicer interface. | 70 » Cursor() (DSCursor, error) |
| 71 » Next(dst DSPropertyLoadSaver) (DSKey, error) |
| 72 } |
| 73 |
| 74 // RawDatastore implements the datastore functionality without any of the fancy |
| 75 // reflection stuff. This is so that Filters can avoid doing lots of redundant |
| 76 // reflection work. See helper.Datastore for a more user-friendly interface. |
| 79 type RawDatastore interface { | 77 type RawDatastore interface { |
| 80 CommonDatastore | 78 CommonDatastore |
| 81 | 79 |
| 82 » Put(key DSKey, src interface{}) (DSKey, error) | 80 » Run(q DSQuery) RDSIterator |
| 83 » Get(key DSKey, dst interface{}) error | 81 » GetAll(q DSQuery, dst *[]DSPropertyMap) ([]DSKey, error) |
| 82 |
| 83 » Put(key DSKey, src DSPropertyLoadSaver) (DSKey, error) |
| 84 » Get(key DSKey, dst DSPropertyLoadSaver) error |
| 84 Delete(key DSKey) error | 85 Delete(key DSKey) error |
| 85 | 86 |
| 86 // These allow you to read and write a multiple datastore objects in | 87 // These allow you to read and write a multiple datastore objects in |
| 87 // a non-atomic batch. | 88 // a non-atomic batch. |
| 88 DeleteMulti(keys []DSKey) error | 89 DeleteMulti(keys []DSKey) error |
| 89 » GetMulti(keys []DSKey, dst interface{}) error | 90 » GetMulti(keys []DSKey, dst []DSPropertyLoadSaver) error |
| 90 » PutMulti(keys []DSKey, src interface{}) ([]DSKey, error) | 91 » PutMulti(keys []DSKey, src []DSPropertyLoadSaver) ([]DSKey, error) |
| 91 } | 92 } |
| 92 | 93 |
| 93 // RDSFactory is the function signature for factory methods compatible with | 94 // RDSFactory is the function signature for factory methods compatible with |
| 94 // SetRDSFactory. | 95 // SetRDSFactory. |
| 95 type RDSFactory func(context.Context) RawDatastore | 96 type RDSFactory func(context.Context) RawDatastore |
| 96 | 97 |
| 97 // GetRDS gets the RawDatastore implementation from context. | 98 // GetRDS gets the RawDatastore implementation from context. |
| 98 func GetRDS(c context.Context) RawDatastore { | 99 func GetRDS(c context.Context) RawDatastore { |
| 99 if f, ok := c.Value(rawDatastoreKey).(RDSFactory); ok && f != nil { | 100 if f, ok := c.Value(rawDatastoreKey).(RDSFactory); ok && f != nil { |
| 100 return f(c) | 101 return f(c) |
| 101 } | 102 } |
| 102 return nil | 103 return nil |
| 103 } | 104 } |
| 104 | 105 |
| 105 // SetRDSFactory sets the function to produce Datastore instances, as returned b
y | 106 // SetRDSFactory sets the function to produce Datastore instances, as returned b
y |
| 106 // the GetRDS method. | 107 // the GetRDS method. |
| 107 func SetRDSFactory(c context.Context, rdsf RDSFactory) context.Context { | 108 func SetRDSFactory(c context.Context, rdsf RDSFactory) context.Context { |
| 108 return context.WithValue(c, rawDatastoreKey, rdsf) | 109 return context.WithValue(c, rawDatastoreKey, rdsf) |
| 109 } | 110 } |
| 110 | 111 |
| 111 // SetRDS sets the current Datastore object in the context. Useful for testing | 112 // SetRDS sets the current Datastore object in the context. Useful for testing |
| 112 // with a quick mock. This is just a shorthand SetDSFactory invocation to set | 113 // with a quick mock. This is just a shorthand SetDSFactory invocation to set |
| 113 // a factory which always returns the same object. | 114 // a factory which always returns the same object. |
| 114 func SetRDS(c context.Context, rds RawDatastore) context.Context { | 115 func SetRDS(c context.Context, rds RawDatastore) context.Context { |
| 115 return SetRDSFactory(c, func(context.Context) RawDatastore { return rds
}) | 116 return SetRDSFactory(c, func(context.Context) RawDatastore { return rds
}) |
| 116 } | 117 } |
| OLD | NEW |