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

Side by Side Diff: go/src/infra/gae/libs/gae/raw_datastore.go

Issue 1227183003: Change RawDatastore to do less reflection. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@move_dummy
Patch Set: fix No/ShouldIndex 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
OLDNEW
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
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 }
OLDNEW
« no previous file with comments | « go/src/infra/gae/libs/gae/properties_test.go ('k') | go/src/infra/gae/libs/gae/upstream_errors.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698