| Index: impl/memory/datastore.go | 
| diff --git a/impl/memory/datastore.go b/impl/memory/datastore.go | 
| index d02cfd61a27ae62f41ff9a8a8cff82aea27167cb..7bdfb9606de3496dcd4bd7104ffa2bc97c1e0759 100644 | 
| --- a/impl/memory/datastore.go | 
| +++ b/impl/memory/datastore.go | 
| @@ -11,7 +11,6 @@ import ( | 
| "golang.org/x/net/context" | 
|  | 
| ds "github.com/luci/gae/service/datastore" | 
| -	"github.com/luci/gae/service/datastore/dskey" | 
| ) | 
|  | 
| //////////////////////////////////// public //////////////////////////////////// | 
| @@ -41,42 +40,28 @@ type dsImpl struct { | 
|  | 
| var _ ds.RawInterface = (*dsImpl)(nil) | 
|  | 
| -func (d *dsImpl) DecodeKey(encoded string) (ds.Key, error) { | 
| -	return dskey.NewFromEncoded(encoded) | 
| -} | 
| - | 
| -func (d *dsImpl) NewKey(kind, stringID string, intID int64, parent ds.Key) ds.Key { | 
| -	return dskey.New(globalAppID, d.ns, kind, stringID, intID, parent) | 
| -} | 
| - | 
| -func (d *dsImpl) PutMulti(keys []ds.Key, vals []ds.PropertyMap, cb ds.PutMultiCB) error { | 
| +func (d *dsImpl) PutMulti(keys []*ds.Key, vals []ds.PropertyMap, cb ds.PutMultiCB) error { | 
| d.data.putMulti(keys, vals, cb) | 
| return nil | 
| } | 
|  | 
| -func (d *dsImpl) GetMulti(keys []ds.Key, _meta ds.MultiMetaGetter, cb ds.GetMultiCB) error { | 
| +func (d *dsImpl) GetMulti(keys []*ds.Key, _meta ds.MultiMetaGetter, cb ds.GetMultiCB) error { | 
| d.data.getMulti(keys, cb) | 
| return nil | 
| } | 
|  | 
| -func (d *dsImpl) DeleteMulti(keys []ds.Key, cb ds.DeleteMultiCB) error { | 
| +func (d *dsImpl) DeleteMulti(keys []*ds.Key, cb ds.DeleteMultiCB) error { | 
| d.data.delMulti(keys, cb) | 
| return nil | 
| } | 
|  | 
| -func (d *dsImpl) NewQuery(kind string) ds.Query { | 
| -	return &queryImpl{ns: d.ns, kind: kind} | 
| -} | 
| - | 
| func (d *dsImpl) DecodeCursor(s string) (ds.Cursor, error) { | 
| return newCursor(s) | 
| } | 
|  | 
| -func (d *dsImpl) Run(qi ds.Query, cb ds.RawRunCB) error { | 
| -	q := qi.(*queryImpl) | 
| -	consistent := q.eqFilters["__ancestor__"] != nil && !q.eventualConsistency | 
| -	idx, head := d.data.getQuerySnaps(consistent) | 
| -	return executeQuery(qi, d.ns, false, idx, head, cb) | 
| +func (d *dsImpl) Run(fq *ds.FinalizedQuery, cb ds.RawRunCB) error { | 
| +	idx, head := d.data.getQuerySnaps(!fq.EventuallyConsistent()) | 
| +	return executeQuery(fq, d.ns, false, idx, head, cb) | 
| } | 
|  | 
| func (d *dsImpl) AddIndexes(idxs ...*ds.IndexDefinition) { | 
| @@ -124,28 +109,20 @@ type txnDsImpl struct { | 
|  | 
| var _ ds.RawInterface = (*txnDsImpl)(nil) | 
|  | 
| -func (d *txnDsImpl) DecodeKey(encoded string) (ds.Key, error) { | 
| -	return dskey.NewFromEncoded(encoded) | 
| -} | 
| - | 
| -func (d *txnDsImpl) NewKey(kind, stringID string, intID int64, parent ds.Key) ds.Key { | 
| -	return dskey.New(globalAppID, d.ns, kind, stringID, intID, parent) | 
| -} | 
| - | 
| -func (d *txnDsImpl) PutMulti(keys []ds.Key, vals []ds.PropertyMap, cb ds.PutMultiCB) error { | 
| +func (d *txnDsImpl) PutMulti(keys []*ds.Key, vals []ds.PropertyMap, cb ds.PutMultiCB) error { | 
| return d.data.run(func() error { | 
| d.data.putMulti(keys, vals, cb) | 
| return nil | 
| }) | 
| } | 
|  | 
| -func (d *txnDsImpl) GetMulti(keys []ds.Key, _meta ds.MultiMetaGetter, cb ds.GetMultiCB) error { | 
| +func (d *txnDsImpl) GetMulti(keys []*ds.Key, _meta ds.MultiMetaGetter, cb ds.GetMultiCB) error { | 
| return d.data.run(func() error { | 
| return d.data.getMulti(keys, cb) | 
| }) | 
| } | 
|  | 
| -func (d *txnDsImpl) DeleteMulti(keys []ds.Key, cb ds.DeleteMultiCB) error { | 
| +func (d *txnDsImpl) DeleteMulti(keys []*ds.Key, cb ds.DeleteMultiCB) error { | 
| return d.data.run(func() error { | 
| return d.data.delMulti(keys, cb) | 
| }) | 
| @@ -155,7 +132,7 @@ func (d *txnDsImpl) DecodeCursor(s string) (ds.Cursor, error) { | 
| return newCursor(s) | 
| } | 
|  | 
| -func (d *txnDsImpl) Run(q ds.Query, cb ds.RawRunCB) error { | 
| +func (d *txnDsImpl) Run(q *ds.FinalizedQuery, cb ds.RawRunCB) error { | 
| return executeQuery(q, d.ns, true, d.data.snap, d.data.snap, cb) | 
| } | 
|  | 
| @@ -163,10 +140,6 @@ func (*txnDsImpl) RunInTransaction(func(c context.Context) error, *ds.Transactio | 
| return errors.New("datastore: nested transactions are not supported") | 
| } | 
|  | 
| -func (d *txnDsImpl) NewQuery(kind string) ds.Query { | 
| -	return &queryImpl{ns: d.ns, kind: kind} | 
| -} | 
| - | 
| func (*txnDsImpl) Testable() ds.Testable { | 
| return nil | 
| } | 
|  |