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

Side by Side Diff: go/src/infra/gae/libs/wrapper/datastore.go

Issue 1230303003: Revert "Refactor current GAE abstraction library to be free of the SDK*" (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Created 5 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 | « go/src/infra/gae/libs/wrapper/context.go ('k') | go/src/infra/gae/libs/wrapper/doc.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 package wrapper
6
7 import (
8 "fmt"
9
10 "golang.org/x/net/context"
11
12 "appengine/datastore"
13
14 "github.com/mjibson/goon"
15 )
16
17 /// Kinds + Keys
18
19 // DSKinder simply allows you to resolve the datastore 'kind' of an object.
20 // See goon.Goon.Kind().
21 type DSKinder interface {
22 Kind(src interface{}) string
23 }
24
25 // DSKindSetter allows you to manipulate the current Kind resolution function.
26 // See goon.Goon.KindNameResolver.
27 type DSKindSetter interface {
28 KindNameResolver() goon.KindNameResolver
29 SetKindNameResolver(goon.KindNameResolver)
30 }
31
32 // DSNewKeyer allows you to generate a new *datastore.Key in a couple ways.
33 // See goon.Goon.Key* for the NewKeyObj* methods, as well as datastore.NewKey.
34 type DSNewKeyer interface {
35 NewKey(kind, stringID string, intID int64, parent *datastore.Key) *datas tore.Key
36 NewKeyObj(src interface{}) *datastore.Key
37 NewKeyObjError(src interface{}) (*datastore.Key, error)
38 }
39
40 /// Read + Write
41
42 // DSSingleReadWriter allows you to read and write a single datastore object.
43 // See goon.Goon for more detail on the same-named functions.
44 type DSSingleReadWriter interface {
45 Put(src interface{}) (*datastore.Key, error)
46 Get(dst interface{}) error
47 Delete(key *datastore.Key) error
48 }
49
50 // DSMultiReadWriter allows you to read and write a multiple datastore objects
51 // in a non-atomic batch. See goon.Goon for more detail on the same-named.
52 // functions. Also implies DSSingleReadWriter.
53 type DSMultiReadWriter interface {
54 DSSingleReadWriter
55 DeleteMulti(keys []*datastore.Key) error
56 GetMulti(dst interface{}) error
57 PutMulti(src interface{}) ([]*datastore.Key, error)
58 }
59
60 /// Queries
61
62 // DSCursor wraps datastore.Cursor.
63 type DSCursor interface {
64 fmt.Stringer
65 }
66
67 // DSIterator wraps datastore.Iterator.
68 type DSIterator interface {
69 Cursor() (DSCursor, error)
70 Next(dst interface{}) (*datastore.Key, error)
71 }
72
73 // DSQuery wraps datastore.Query.
74 type DSQuery interface {
75 Ancestor(ancestor *datastore.Key) DSQuery
76 Distinct() DSQuery
77 End(c DSCursor) DSQuery
78 EventualConsistency() DSQuery
79 Filter(filterStr string, value interface{}) DSQuery
80 KeysOnly() DSQuery
81 Limit(limit int) DSQuery
82 Offset(offset int) DSQuery
83 Order(fieldName string) DSQuery
84 Project(fieldNames ...string) DSQuery
85 Start(c DSCursor) DSQuery
86 }
87
88 // DSQueryer implements all query-related functionality of goon.Goon/datastore.
89 type DSQueryer interface {
90 NewQuery(kind string) DSQuery
91 Run(q DSQuery) DSIterator
92 GetAll(q DSQuery, dst interface{}) ([]*datastore.Key, error)
93 Count(q DSQuery) (int, error)
94 }
95
96 /// Transactions
97
98 // DSTransactioner implements the function for entering a transaction with
99 // datastore. The function receives a context without the ability to enter a
100 // transaction again (since recursive transactions are not implemented in
101 // datastore).
102 type DSTransactioner interface {
103 RunInTransaction(f func(c context.Context) error, opts *datastore.Transa ctionOptions) error
104 }
105
106 // Datastore implements the full datastore functionality.
107 type Datastore interface {
108 DSKinder
109 DSNewKeyer
110 DSMultiReadWriter
111 DSQueryer
112 DSKindSetter
113 DSTransactioner
114 }
115
116 // DSFactory is the function signature for factory methods compatible with
117 // SetDSFactory.
118 type DSFactory func(context.Context) Datastore
119
120 // GetDS gets the Datastore implementation from context.
121 func GetDS(c context.Context) Datastore {
122 if f, ok := c.Value(datastoreKey).(DSFactory); ok && f != nil {
123 return f(c)
124 }
125 return nil
126 }
127
128 // SetDSFactory sets the function to produce Datastore instances, as returned by
129 // the GetDS method.
130 func SetDSFactory(c context.Context, dsf DSFactory) context.Context {
131 return context.WithValue(c, datastoreKey, dsf)
132 }
133
134 // SetDS sets the current Datastore object in the context. Useful for testing
135 // with a quick mock. This is just a shorthand SetDSFactory invocation to set
136 // a factory which always returns the same object.
137 func SetDS(c context.Context, ds Datastore) context.Context {
138 return SetDSFactory(c, func(context.Context) Datastore { return ds })
139 }
OLDNEW
« no previous file with comments | « go/src/infra/gae/libs/wrapper/context.go ('k') | go/src/infra/gae/libs/wrapper/doc.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698