| Index: service/datastore/context.go
|
| diff --git a/service/datastore/context.go b/service/datastore/context.go
|
| index 717797bb3eb94694fad9b80dfda7efb8a1c4d889..8557a5f5fb77cc593a480bfa375f1db31a8826d3 100644
|
| --- a/service/datastore/context.go
|
| +++ b/service/datastore/context.go
|
| @@ -6,6 +6,7 @@ package datastore
|
|
|
| import (
|
| "github.com/luci/gae/service/info"
|
| +
|
| "golang.org/x/net/context"
|
| )
|
|
|
| @@ -17,10 +18,8 @@ var (
|
| )
|
|
|
| // RawFactory is the function signature for factory methods compatible with
|
| -// SetRawFactory. wantTxn is true if the Factory should return the datastore in
|
| -// the current transaction, and false if the Factory should return the
|
| -// non-transactional (root) datastore.
|
| -type RawFactory func(c context.Context, wantTxn bool) RawInterface
|
| +// SetRawFactory.
|
| +type RawFactory func(c context.Context) RawInterface
|
|
|
| // RawFilter is the function signature for a RawFilter implementation. It
|
| // gets the current RDS implementation, and returns a new RDS implementation
|
| @@ -29,17 +28,17 @@ type RawFilter func(context.Context, RawInterface) RawInterface
|
|
|
| // getUnfiltered gets gets the RawInterface implementation from context without
|
| // any of the filters applied.
|
| -func getUnfiltered(c context.Context, wantTxn bool) RawInterface {
|
| +func getUnfiltered(c context.Context) RawInterface {
|
| if f, ok := c.Value(rawDatastoreKey).(RawFactory); ok && f != nil {
|
| - return f(c, wantTxn)
|
| + return f(c)
|
| }
|
| return nil
|
| }
|
|
|
| // getFiltered gets the datastore (transactional or not), and applies all of
|
| // the currently installed filters to it.
|
| -func getFiltered(c context.Context, wantTxn bool) RawInterface {
|
| - ret := getUnfiltered(c, wantTxn)
|
| +func getFiltered(c context.Context) RawInterface {
|
| + ret := getUnfiltered(c)
|
| if ret == nil {
|
| return nil
|
| }
|
| @@ -49,45 +48,13 @@ func getFiltered(c context.Context, wantTxn bool) RawInterface {
|
| return applyCheckFilter(c, ret)
|
| }
|
|
|
| -// GetRaw gets the RawInterface implementation from context.
|
| -func GetRaw(c context.Context) RawInterface {
|
| - return getFiltered(c, true)
|
| -}
|
| -
|
| -// GetRawNoTxn gets the RawInterface implementation from context. If there's a
|
| -// currently active transaction, this will return a non-transactional connection
|
| -// to the datastore, otherwise this is the same as GetRaw.
|
| -func GetRawNoTxn(c context.Context) RawInterface {
|
| - return getFiltered(c, false)
|
| -}
|
| -
|
| -// Get gets the Interface implementation from context.
|
| -func Get(c context.Context) Interface {
|
| - inf := info.Get(c)
|
| - ns, _ := inf.GetNamespace()
|
| - return &datastoreImpl{
|
| - GetRaw(c),
|
| - inf.FullyQualifiedAppID(),
|
| - ns,
|
| - }
|
| -}
|
| -
|
| -// GetNoTxn gets the Interface implementation from context. If there's a
|
| -// currently active transaction, this will return a non-transactional connection
|
| -// to the datastore, otherwise this is the same as GetRaw.
|
| -// Get gets the Interface implementation from context.
|
| -func GetNoTxn(c context.Context) Interface {
|
| - inf := info.Get(c)
|
| - ns, _ := inf.GetNamespace()
|
| - return &datastoreImpl{
|
| - GetRawNoTxn(c),
|
| - inf.FullyQualifiedAppID(),
|
| - ns,
|
| - }
|
| +// Raw gets the RawInterface implementation from context.
|
| +func Raw(c context.Context) RawInterface {
|
| + return getFiltered(c)
|
| }
|
|
|
| // SetRawFactory sets the function to produce Datastore instances, as returned by
|
| -// the GetRaw method.
|
| +// the Raw method.
|
| func SetRawFactory(c context.Context, rdsf RawFactory) context.Context {
|
| return context.WithValue(c, rawDatastoreKey, rdsf)
|
| }
|
| @@ -96,7 +63,7 @@ func SetRawFactory(c context.Context, rdsf RawFactory) context.Context {
|
| // with a quick mock. This is just a shorthand SetRawFactory invocation to set
|
| // a factory which always returns the same object.
|
| func SetRaw(c context.Context, rds RawInterface) context.Context {
|
| - return SetRawFactory(c, func(context.Context, bool) RawInterface { return rds })
|
| + return SetRawFactory(c, func(context.Context) RawInterface { return rds })
|
| }
|
|
|
| func getCurFilters(c context.Context) []RawFilter {
|
| @@ -118,3 +85,10 @@ func AddRawFilters(c context.Context, filts ...RawFilter) context.Context {
|
| newFilts = append(newFilts, filts...)
|
| return context.WithValue(c, rawDatastoreFilterKey, newFilts)
|
| }
|
| +
|
| +// GetKeyContext returns the KeyContext whose AppID and Namespace match those
|
| +// installed in the supplied Context.
|
| +func GetKeyContext(c context.Context) KeyContext {
|
| + ri := info.Raw(c)
|
| + return KeyContext{ri.FullyQualifiedAppID(), ri.GetNamespace()}
|
| +}
|
|
|