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

Side by Side Diff: impl/prod/raw_datastore_type_converter.go

Issue 1259593005: Add 'user friendly' datastore API. (Closed) Base URL: https://github.com/luci/gae.git@master
Patch Set: 100% coverage of new code Created 5 years, 4 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 prod 5 package prod
6 6
7 import ( 7 import (
8 bs "github.com/luci/gae/service/blobstore" 8 bs "github.com/luci/gae/service/blobstore"
9 » rds "github.com/luci/gae/service/rawdatastore" 9 » ds "github.com/luci/gae/service/datastore"
10 "google.golang.org/appengine" 10 "google.golang.org/appengine"
11 "google.golang.org/appengine/datastore" 11 "google.golang.org/appengine/datastore"
12 ) 12 )
13 13
14 type typeFilter struct { 14 type typeFilter struct {
15 » pm rds.PropertyMap 15 » pm ds.PropertyMap
16 } 16 }
17 17
18 var _ datastore.PropertyLoadSaver = &typeFilter{} 18 var _ datastore.PropertyLoadSaver = &typeFilter{}
19 19
20 func (tf *typeFilter) Load(props []datastore.Property) error { 20 func (tf *typeFilter) Load(props []datastore.Property) error {
21 » tf.pm = make(rds.PropertyMap, len(props)) 21 » tf.pm = make(ds.PropertyMap, len(props))
22 for _, p := range props { 22 for _, p := range props {
23 val := p.Value 23 val := p.Value
24 switch x := val.(type) { 24 switch x := val.(type) {
25 case datastore.ByteString: 25 case datastore.ByteString:
26 » » » val = rds.ByteString(x) 26 » » » val = ds.ByteString(x)
27 case *datastore.Key: 27 case *datastore.Key:
28 val = dsR2F(x) 28 val = dsR2F(x)
29 case appengine.BlobKey: 29 case appengine.BlobKey:
30 val = bs.Key(x) 30 val = bs.Key(x)
31 case appengine.GeoPoint: 31 case appengine.GeoPoint:
32 » » » val = rds.GeoPoint(x) 32 » » » val = ds.GeoPoint(x)
33 } 33 }
34 » » prop := rds.Property{} 34 » » prop := ds.Property{}
35 » » is := rds.ShouldIndex 35 » » is := ds.ShouldIndex
36 if p.NoIndex { 36 if p.NoIndex {
37 » » » is = rds.NoIndex 37 » » » is = ds.NoIndex
38 } 38 }
39 if err := prop.SetValue(val, is); err != nil { 39 if err := prop.SetValue(val, is); err != nil {
40 return err 40 return err
41 } 41 }
42 tf.pm[p.Name] = append(tf.pm[p.Name], prop) 42 tf.pm[p.Name] = append(tf.pm[p.Name], prop)
43 } 43 }
44 return nil 44 return nil
45 } 45 }
46 46
47 func (tf *typeFilter) Save() ([]datastore.Property, error) { 47 func (tf *typeFilter) Save() ([]datastore.Property, error) {
48 props := []datastore.Property{} 48 props := []datastore.Property{}
49 for name, propList := range tf.pm { 49 for name, propList := range tf.pm {
50 if len(name) != 0 && name[0] == '$' { 50 if len(name) != 0 && name[0] == '$' {
51 continue 51 continue
52 } 52 }
53 multiple := len(propList) > 1 53 multiple := len(propList) > 1
54 for _, prop := range propList { 54 for _, prop := range propList {
55 toAdd := datastore.Property{ 55 toAdd := datastore.Property{
56 Name: name, 56 Name: name,
57 Multiple: multiple, 57 Multiple: multiple,
58 » » » » NoIndex: prop.IndexSetting() == rds.NoIndex, 58 » » » » NoIndex: prop.IndexSetting() == ds.NoIndex,
59 } 59 }
60 switch x := prop.Value().(type) { 60 switch x := prop.Value().(type) {
61 » » » case rds.ByteString: 61 » » » case ds.ByteString:
62 toAdd.Value = datastore.ByteString(x) 62 toAdd.Value = datastore.ByteString(x)
63 » » » case rds.Key: 63 » » » case ds.Key:
64 toAdd.Value = dsF2R(x) 64 toAdd.Value = dsF2R(x)
65 case bs.Key: 65 case bs.Key:
66 toAdd.Value = appengine.BlobKey(x) 66 toAdd.Value = appengine.BlobKey(x)
67 » » » case rds.GeoPoint: 67 » » » case ds.GeoPoint:
68 toAdd.Value = appengine.GeoPoint(x) 68 toAdd.Value = appengine.GeoPoint(x)
69 default: 69 default:
70 toAdd.Value = x 70 toAdd.Value = x
71 } 71 }
72 props = append(props, toAdd) 72 props = append(props, toAdd)
73 } 73 }
74 } 74 }
75 return props, nil 75 return props, nil
76 } 76 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698