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

Unified 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 side-by-side diff with in-line comments
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 »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: go/src/infra/gae/libs/wrapper/datastore.go
diff --git a/go/src/infra/gae/libs/wrapper/datastore.go b/go/src/infra/gae/libs/wrapper/datastore.go
new file mode 100644
index 0000000000000000000000000000000000000000..68c86fdd134e0eadcbd0b58a3ad55048d9c5fb58
--- /dev/null
+++ b/go/src/infra/gae/libs/wrapper/datastore.go
@@ -0,0 +1,139 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package wrapper
+
+import (
+ "fmt"
+
+ "golang.org/x/net/context"
+
+ "appengine/datastore"
+
+ "github.com/mjibson/goon"
+)
+
+/// Kinds + Keys
+
+// DSKinder simply allows you to resolve the datastore 'kind' of an object.
+// See goon.Goon.Kind().
+type DSKinder interface {
+ Kind(src interface{}) string
+}
+
+// DSKindSetter allows you to manipulate the current Kind resolution function.
+// See goon.Goon.KindNameResolver.
+type DSKindSetter interface {
+ KindNameResolver() goon.KindNameResolver
+ SetKindNameResolver(goon.KindNameResolver)
+}
+
+// DSNewKeyer allows you to generate a new *datastore.Key in a couple ways.
+// See goon.Goon.Key* for the NewKeyObj* methods, as well as datastore.NewKey.
+type DSNewKeyer interface {
+ NewKey(kind, stringID string, intID int64, parent *datastore.Key) *datastore.Key
+ NewKeyObj(src interface{}) *datastore.Key
+ NewKeyObjError(src interface{}) (*datastore.Key, error)
+}
+
+/// Read + Write
+
+// DSSingleReadWriter allows you to read and write a single datastore object.
+// See goon.Goon for more detail on the same-named functions.
+type DSSingleReadWriter interface {
+ Put(src interface{}) (*datastore.Key, error)
+ Get(dst interface{}) error
+ Delete(key *datastore.Key) error
+}
+
+// DSMultiReadWriter allows you to read and write a multiple datastore objects
+// in a non-atomic batch. See goon.Goon for more detail on the same-named.
+// functions. Also implies DSSingleReadWriter.
+type DSMultiReadWriter interface {
+ DSSingleReadWriter
+ DeleteMulti(keys []*datastore.Key) error
+ GetMulti(dst interface{}) error
+ PutMulti(src interface{}) ([]*datastore.Key, error)
+}
+
+/// Queries
+
+// DSCursor wraps datastore.Cursor.
+type DSCursor interface {
+ fmt.Stringer
+}
+
+// DSIterator wraps datastore.Iterator.
+type DSIterator interface {
+ Cursor() (DSCursor, error)
+ Next(dst interface{}) (*datastore.Key, error)
+}
+
+// DSQuery wraps datastore.Query.
+type DSQuery interface {
+ Ancestor(ancestor *datastore.Key) DSQuery
+ Distinct() DSQuery
+ End(c DSCursor) DSQuery
+ EventualConsistency() DSQuery
+ Filter(filterStr string, value interface{}) DSQuery
+ KeysOnly() DSQuery
+ Limit(limit int) DSQuery
+ Offset(offset int) DSQuery
+ Order(fieldName string) DSQuery
+ Project(fieldNames ...string) DSQuery
+ Start(c DSCursor) DSQuery
+}
+
+// DSQueryer implements all query-related functionality of goon.Goon/datastore.
+type DSQueryer interface {
+ NewQuery(kind string) DSQuery
+ Run(q DSQuery) DSIterator
+ GetAll(q DSQuery, dst interface{}) ([]*datastore.Key, error)
+ Count(q DSQuery) (int, error)
+}
+
+/// Transactions
+
+// DSTransactioner implements the function for entering a transaction with
+// datastore. The function receives a context without the ability to enter a
+// transaction again (since recursive transactions are not implemented in
+// datastore).
+type DSTransactioner interface {
+ RunInTransaction(f func(c context.Context) error, opts *datastore.TransactionOptions) error
+}
+
+// Datastore implements the full datastore functionality.
+type Datastore interface {
+ DSKinder
+ DSNewKeyer
+ DSMultiReadWriter
+ DSQueryer
+ DSKindSetter
+ DSTransactioner
+}
+
+// DSFactory is the function signature for factory methods compatible with
+// SetDSFactory.
+type DSFactory func(context.Context) Datastore
+
+// GetDS gets the Datastore implementation from context.
+func GetDS(c context.Context) Datastore {
+ if f, ok := c.Value(datastoreKey).(DSFactory); ok && f != nil {
+ return f(c)
+ }
+ return nil
+}
+
+// SetDSFactory sets the function to produce Datastore instances, as returned by
+// the GetDS method.
+func SetDSFactory(c context.Context, dsf DSFactory) context.Context {
+ return context.WithValue(c, datastoreKey, dsf)
+}
+
+// SetDS sets the current Datastore object in the context. Useful for testing
+// with a quick mock. This is just a shorthand SetDSFactory invocation to set
+// a factory which always returns the same object.
+func SetDS(c context.Context, ds Datastore) context.Context {
+ return SetDSFactory(c, func(context.Context) Datastore { return ds })
+}
« 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