Index: go/src/infra/gae/libs/gae/filters/count/rds.go |
diff --git a/go/src/infra/gae/libs/gae/filters/count/rds.go b/go/src/infra/gae/libs/gae/filters/count/rds.go |
new file mode 100644 |
index 0000000000000000000000000000000000000000..20e1caf29fb232a2a3e2b12a22eda603e63b7310 |
--- /dev/null |
+++ b/go/src/infra/gae/libs/gae/filters/count/rds.go |
@@ -0,0 +1,104 @@ |
+// 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 count |
+ |
+import ( |
+ "golang.org/x/net/context" |
+ |
+ "infra/gae/libs/gae" |
+) |
+ |
+// RDSCounter is the counter object for the RawDatastore service. |
+type RDSCounter struct { |
+ NewKey Entry |
+ DecodeKey Entry |
+ NewQuery Entry |
+ Count Entry |
+ RunInTransaction Entry |
+ Run Entry |
+ GetAll Entry |
+ Put Entry |
+ Get Entry |
+ Delete Entry |
+ DeleteMulti Entry |
+ GetMulti Entry |
+ PutMulti Entry |
+} |
+ |
+type rdsCounter struct { |
+ c *RDSCounter |
+ |
+ rds gae.RawDatastore |
+} |
+ |
+var _ gae.RawDatastore = (*rdsCounter)(nil) |
+ |
+func (r *rdsCounter) NewKey(kind, stringID string, intID int64, parent gae.DSKey) gae.DSKey { |
+ r.c.NewKey.up() |
+ return r.rds.NewKey(kind, stringID, intID, parent) |
+} |
+ |
+func (r *rdsCounter) DecodeKey(encoded string) (gae.DSKey, error) { |
+ ret, err := r.rds.DecodeKey(encoded) |
+ return ret, r.c.DecodeKey.up(err) |
+} |
+ |
+func (r *rdsCounter) NewQuery(kind string) gae.DSQuery { |
+ r.c.NewQuery.up() |
+ return r.rds.NewQuery(kind) |
+} |
+ |
+func (r *rdsCounter) Run(q gae.DSQuery) gae.RDSIterator { |
+ r.c.Run.up() |
+ return r.rds.Run(q) |
+} |
+ |
+func (r *rdsCounter) GetAll(q gae.DSQuery, dst *[]gae.DSPropertyMap) ([]gae.DSKey, error) { |
+ ret, err := r.rds.GetAll(q, dst) |
+ return ret, r.c.GetAll.up(err) |
+} |
+ |
+func (r *rdsCounter) Count(q gae.DSQuery) (int, error) { |
+ ret, err := r.rds.Count(q) |
+ return ret, r.c.Count.up(err) |
+} |
+ |
+func (r *rdsCounter) RunInTransaction(f func(context.Context) error, opts *gae.DSTransactionOptions) error { |
+ return r.c.RunInTransaction.up(r.rds.RunInTransaction(f, opts)) |
+} |
+ |
+func (r *rdsCounter) Put(key gae.DSKey, src gae.DSPropertyLoadSaver) (gae.DSKey, error) { |
+ ret, err := r.rds.Put(key, src) |
+ return ret, r.c.Put.up(err) |
+} |
+ |
+func (r *rdsCounter) Get(key gae.DSKey, dst gae.DSPropertyLoadSaver) error { |
+ return r.c.Get.up(r.rds.Get(key, dst)) |
+} |
+ |
+func (r *rdsCounter) Delete(key gae.DSKey) error { |
+ return r.c.Delete.up(r.rds.Delete(key)) |
+} |
+ |
+func (r *rdsCounter) DeleteMulti(keys []gae.DSKey) error { |
+ return r.c.DeleteMulti.up(r.rds.DeleteMulti(keys)) |
+} |
+ |
+func (r *rdsCounter) GetMulti(keys []gae.DSKey, dst []gae.DSPropertyLoadSaver) error { |
+ return r.c.GetMulti.up(r.rds.GetMulti(keys, dst)) |
+} |
+ |
+func (r *rdsCounter) PutMulti(keys []gae.DSKey, src []gae.DSPropertyLoadSaver) ([]gae.DSKey, error) { |
+ ret, err := r.rds.PutMulti(keys, src) |
+ return ret, r.c.PutMulti.up(err) |
+} |
+ |
+// FilterRDS installs a counter RawDatastore filter in the context. |
+func FilterRDS(c context.Context) (context.Context, *RDSCounter) { |
+ state := &RDSCounter{} |
+ return gae.AddRDSFilters(c, func(ic context.Context, rds gae.RawDatastore) gae.RawDatastore { |
+ return &rdsCounter{state, rds} |
+ }), state |
+} |