OLD | NEW |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |