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

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: add another test 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 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 » err = d.RawInterface.GetMulti(keys, NewMultiMeta(pms), func(pm PropertyM ap, err error) {
138 if !lme.Assign(i, err) { 138 if !lme.Assign(i, err) {
139 lme.Assign(i, mat.setPM(slice.Index(i), pm)) 139 lme.Assign(i, mat.setPM(slice.Index(i), pm))
140 } 140 }
141 i++ 141 i++
142 }) 142 })
143 143
144 if err == nil { 144 if err == nil {
145 err = lme.Get() 145 err = lme.Get()
146 } 146 }
147 return err 147 return err
148 } 148 }
149 149
150 func (d *datastoreImpl) PutMulti(src interface{}) error { 150 func (d *datastoreImpl) PutMulti(src interface{}) error {
151 slice := reflect.ValueOf(src) 151 slice := reflect.ValueOf(src)
152 mat := parseMultiArg(slice.Type()) 152 mat := parseMultiArg(slice.Type())
153 if !mat.valid { 153 if !mat.valid {
154 return fmt.Errorf("invalid PutMulti input type: %T", src) 154 return fmt.Errorf("invalid PutMulti input type: %T", src)
155 } 155 }
156 156
157 » keys, err := mat.GetKeys(d.NewKey, slice) 157 » keys, vals, err := mat.GetKeysPMs(d.NewKey, slice)
158 if err != nil { 158 if err != nil {
159 return err 159 return err
160 } 160 }
161
162 vals, err := mat.GetPMs(slice)
163 if err != nil {
164 return err
165 }
166 161
167 lme := errors.LazyMultiError{Size: len(keys)} 162 lme := errors.LazyMultiError{Size: len(keys)}
168 i := 0 163 i := 0
169 err = d.RawInterface.PutMulti(keys, vals, func(key Key, err error) { 164 err = d.RawInterface.PutMulti(keys, vals, func(key Key, err error) {
170 if key != keys[i] { 165 if key != keys[i] {
171 mat.setKey(slice.Index(i), key) 166 mat.setKey(slice.Index(i), key)
172 } 167 }
173 lme.Assign(i, err) 168 lme.Assign(i, err)
174 i++ 169 i++
175 }) 170 })
(...skipping 14 matching lines...) Expand all
190 err = lme.Get() 185 err = lme.Get()
191 if err == nil { 186 if err == nil {
192 err = extErr 187 err = extErr
193 } 188 }
194 return 189 return
195 } 190 }
196 191
197 func (d *datastoreImpl) Raw() RawInterface { 192 func (d *datastoreImpl) Raw() RawInterface {
198 return d.RawInterface 193 return d.RawInterface
199 } 194 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698