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

Side by Side Diff: service/datastore/datastore.go

Issue 1270113002: Re-add metadata passthrough on Get operations (Closed) Base URL: https://github.com/luci/gae.git@fix_other_interfaces
Patch Set: cleanup 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
« no previous file with comments | « service/datastore/checkfilter_test.go ('k') | service/datastore/datastore_test.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 datastore 5 package datastore
6 6
7 import ( 7 import (
8 "fmt" 8 "fmt"
9 "reflect" 9 "reflect"
10 10
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 return errors.SingleError(d.DeleteMulti([]Key{key})) 120 return errors.SingleError(d.DeleteMulti([]Key{key}))
121 } 121 }
122 122
123 func (d *datastoreImpl) GetMulti(dst interface{}) error { 123 func (d *datastoreImpl) GetMulti(dst interface{}) error {
124 slice := reflect.ValueOf(dst) 124 slice := reflect.ValueOf(dst)
125 mat := parseMultiArg(slice.Type()) 125 mat := parseMultiArg(slice.Type())
126 if !mat.valid { 126 if !mat.valid {
127 return fmt.Errorf("invalid GetMulti input type: %T", dst) 127 return fmt.Errorf("invalid GetMulti input type: %T", dst)
128 } 128 }
129 129
130 » keys, err := mat.GetKeys(d.NewKey, slice) 130 » keys, pms, err := mat.GetKeysPMs(d.NewKey, slice)
131 if err != nil { 131 if err != nil {
132 return err 132 return err
133 } 133 }
134 134
135 lme := errors.LazyMultiError{Size: len(keys)} 135 lme := errors.LazyMultiError{Size: len(keys)}
136 i := 0 136 i := 0
137 » err = d.RawInterface.GetMulti(keys, func(pm PropertyMap, err error) { 137 » meta := NewMultiMetaGetter(pms)
138 » err = d.RawInterface.GetMulti(keys, meta, func(pm PropertyMap, err error ) {
138 if !lme.Assign(i, err) { 139 if !lme.Assign(i, err) {
139 lme.Assign(i, mat.setPM(slice.Index(i), pm)) 140 lme.Assign(i, mat.setPM(slice.Index(i), pm))
140 } 141 }
141 i++ 142 i++
142 }) 143 })
143 144
144 if err == nil { 145 if err == nil {
145 err = lme.Get() 146 err = lme.Get()
146 } 147 }
147 return err 148 return err
148 } 149 }
149 150
150 func (d *datastoreImpl) PutMulti(src interface{}) error { 151 func (d *datastoreImpl) PutMulti(src interface{}) error {
151 slice := reflect.ValueOf(src) 152 slice := reflect.ValueOf(src)
152 mat := parseMultiArg(slice.Type()) 153 mat := parseMultiArg(slice.Type())
153 if !mat.valid { 154 if !mat.valid {
154 return fmt.Errorf("invalid PutMulti input type: %T", src) 155 return fmt.Errorf("invalid PutMulti input type: %T", src)
155 } 156 }
156 157
157 » keys, err := mat.GetKeys(d.NewKey, slice) 158 » keys, vals, err := mat.GetKeysPMs(d.NewKey, slice)
158 if err != nil { 159 if err != nil {
159 return err 160 return err
160 } 161 }
161
162 vals, err := mat.GetPMs(slice)
163 if err != nil {
164 return err
165 }
166 162
167 lme := errors.LazyMultiError{Size: len(keys)} 163 lme := errors.LazyMultiError{Size: len(keys)}
168 i := 0 164 i := 0
169 err = d.RawInterface.PutMulti(keys, vals, func(key Key, err error) { 165 err = d.RawInterface.PutMulti(keys, vals, func(key Key, err error) {
170 if key != keys[i] { 166 if key != keys[i] {
171 mat.setKey(slice.Index(i), key) 167 mat.setKey(slice.Index(i), key)
172 } 168 }
173 lme.Assign(i, err) 169 lme.Assign(i, err)
174 i++ 170 i++
175 }) 171 })
(...skipping 14 matching lines...) Expand all
190 err = lme.Get() 186 err = lme.Get()
191 if err == nil { 187 if err == nil {
192 err = extErr 188 err = extErr
193 } 189 }
194 return 190 return
195 } 191 }
196 192
197 func (d *datastoreImpl) Raw() RawInterface { 193 func (d *datastoreImpl) Raw() RawInterface {
198 return d.RawInterface 194 return d.RawInterface
199 } 195 }
OLDNEW
« no previous file with comments | « service/datastore/checkfilter_test.go ('k') | service/datastore/datastore_test.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698