Index: service/rawdatastore/interface.go |
diff --git a/service/rawdatastore/interface.go b/service/rawdatastore/interface.go |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0764031d1daeecd31ea004df681794aeb0fee2b4 |
--- /dev/null |
+++ b/service/rawdatastore/interface.go |
@@ -0,0 +1,86 @@ |
+// 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 rawdatastore |
+ |
+import ( |
+ "fmt" |
+ |
+ "golang.org/x/net/context" |
+) |
+ |
+/// Kinds + Keys |
+ |
+// Key is the equivalent of *datastore.Key from the original SDK, except that |
+// it can have multiple implementations. See helper.Key* methods for missing |
+// methods like KeyIncomplete (and some new ones like KeyValid). |
+type Key interface { |
+ Kind() string |
+ StringID() string |
+ IntID() int64 |
+ Parent() Key |
+ AppID() string |
+ Namespace() string |
+ |
+ String() string |
+} |
+ |
+// KeyTok is a single token from a multi-part Key. |
+type KeyTok struct { |
+ Kind string |
+ IntID int64 |
+ StringID string |
+} |
+ |
+// Cursor wraps datastore.Cursor. |
+type Cursor interface { |
+ fmt.Stringer |
+} |
+ |
+// Query wraps datastore.Query. |
+type Query interface { |
+ Ancestor(ancestor Key) Query |
+ Distinct() Query |
+ End(c Cursor) Query |
+ EventualConsistency() Query |
+ Filter(filterStr string, value interface{}) Query |
+ KeysOnly() Query |
+ Limit(limit int) Query |
+ Offset(offset int) Query |
+ Order(fieldName string) Query |
+ Project(fieldNames ...string) Query |
+ Start(c Cursor) Query |
+} |
+ |
+// Iterator wraps datastore.Iterator. |
+type Iterator interface { |
+ Cursor() (Cursor, error) |
+ Next(dst PropertyLoadSaver) (Key, error) |
+} |
+ |
+// Interface implements the datastore functionality without any of the fancy |
+// reflection stuff. This is so that Filters can avoid doing lots of redundant |
+// reflection work. See helper.Datastore for a more user-friendly interface. |
+type Interface interface { |
+ NewKey(kind, stringID string, intID int64, parent Key) Key |
+ DecodeKey(encoded string) (Key, error) |
+ |
+ NewQuery(kind string) Query |
+ Count(q Query) (int, error) |
+ |
+ RunInTransaction(f func(c context.Context) error, opts *TransactionOptions) error |
+ |
+ Run(q Query) Iterator |
+ GetAll(q Query, dst *[]PropertyMap) ([]Key, error) |
+ |
+ Put(key Key, src PropertyLoadSaver) (Key, error) |
+ Get(key Key, dst PropertyLoadSaver) error |
+ Delete(key Key) error |
+ |
+ // These allow you to read and write a multiple datastore objects in |
+ // a non-atomic batch. |
+ DeleteMulti(keys []Key) error |
+ GetMulti(keys []Key, dst []PropertyLoadSaver) error |
+ PutMulti(keys []Key, src []PropertyLoadSaver) ([]Key, error) |
+} |