| 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 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 return true | 93 return true |
| 94 }) | 94 }) |
| 95 } | 95 } |
| 96 | 96 |
| 97 slice := v.Elem() | 97 slice := v.Elem() |
| 98 mat := parseMultiArg(slice.Type()) | 98 mat := parseMultiArg(slice.Type()) |
| 99 if !mat.valid || mat.newElem == nil { | 99 if !mat.valid || mat.newElem == nil { |
| 100 return fmt.Errorf("invalid GetAll input type: %T", dst) | 100 return fmt.Errorf("invalid GetAll input type: %T", dst) |
| 101 } | 101 } |
| 102 | 102 |
| 103 » lme := errors.LazyMultiError{Size: slice.Len()} | 103 » lme := errors.NewLazyMultiError(slice.Len()) |
| 104 i := 0 | 104 i := 0 |
| 105 err := d.RawInterface.Run(q, func(k Key, pm PropertyMap, _ CursorCB) boo
l { | 105 err := d.RawInterface.Run(q, func(k Key, pm PropertyMap, _ CursorCB) boo
l { |
| 106 slice.Set(reflect.Append(slice, mat.newElem())) | 106 slice.Set(reflect.Append(slice, mat.newElem())) |
| 107 itm := slice.Index(i) | 107 itm := slice.Index(i) |
| 108 mat.setKey(itm, k) | 108 mat.setKey(itm, k) |
| 109 lme.Assign(i, mat.setPM(itm, pm)) | 109 lme.Assign(i, mat.setPM(itm, pm)) |
| 110 i++ | 110 i++ |
| 111 return true | 111 return true |
| 112 }) | 112 }) |
| 113 if err == nil { | 113 if err == nil { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 mat := parseMultiArg(slice.Type()) | 149 mat := parseMultiArg(slice.Type()) |
| 150 if !mat.valid { | 150 if !mat.valid { |
| 151 return fmt.Errorf("invalid GetMulti input type: %T", dst) | 151 return fmt.Errorf("invalid GetMulti input type: %T", dst) |
| 152 } | 152 } |
| 153 | 153 |
| 154 keys, pms, err := mat.GetKeysPMs(d.NewKey, slice) | 154 keys, pms, err := mat.GetKeysPMs(d.NewKey, slice) |
| 155 if err != nil { | 155 if err != nil { |
| 156 return err | 156 return err |
| 157 } | 157 } |
| 158 | 158 |
| 159 » lme := errors.LazyMultiError{Size: len(keys)} | 159 » lme := errors.NewLazyMultiError(len(keys)) |
| 160 i := 0 | 160 i := 0 |
| 161 meta := NewMultiMetaGetter(pms) | 161 meta := NewMultiMetaGetter(pms) |
| 162 err = d.RawInterface.GetMulti(keys, meta, func(pm PropertyMap, err error
) { | 162 err = d.RawInterface.GetMulti(keys, meta, func(pm PropertyMap, err error
) { |
| 163 if !lme.Assign(i, err) { | 163 if !lme.Assign(i, err) { |
| 164 lme.Assign(i, mat.setPM(slice.Index(i), pm)) | 164 lme.Assign(i, mat.setPM(slice.Index(i), pm)) |
| 165 } | 165 } |
| 166 i++ | 166 i++ |
| 167 }) | 167 }) |
| 168 | 168 |
| 169 if err == nil { | 169 if err == nil { |
| 170 err = lme.Get() | 170 err = lme.Get() |
| 171 } | 171 } |
| 172 return err | 172 return err |
| 173 } | 173 } |
| 174 | 174 |
| 175 func (d *datastoreImpl) PutMulti(src interface{}) error { | 175 func (d *datastoreImpl) PutMulti(src interface{}) error { |
| 176 slice := reflect.ValueOf(src) | 176 slice := reflect.ValueOf(src) |
| 177 mat := parseMultiArg(slice.Type()) | 177 mat := parseMultiArg(slice.Type()) |
| 178 if !mat.valid { | 178 if !mat.valid { |
| 179 return fmt.Errorf("invalid PutMulti input type: %T", src) | 179 return fmt.Errorf("invalid PutMulti input type: %T", src) |
| 180 } | 180 } |
| 181 | 181 |
| 182 keys, vals, err := mat.GetKeysPMs(d.NewKey, slice) | 182 keys, vals, err := mat.GetKeysPMs(d.NewKey, slice) |
| 183 if err != nil { | 183 if err != nil { |
| 184 return err | 184 return err |
| 185 } | 185 } |
| 186 | 186 |
| 187 » lme := errors.LazyMultiError{Size: len(keys)} | 187 » lme := errors.NewLazyMultiError(len(keys)) |
| 188 i := 0 | 188 i := 0 |
| 189 err = d.RawInterface.PutMulti(keys, vals, func(key Key, err error) { | 189 err = d.RawInterface.PutMulti(keys, vals, func(key Key, err error) { |
| 190 if key != keys[i] { | 190 if key != keys[i] { |
| 191 mat.setKey(slice.Index(i), key) | 191 mat.setKey(slice.Index(i), key) |
| 192 } | 192 } |
| 193 lme.Assign(i, err) | 193 lme.Assign(i, err) |
| 194 i++ | 194 i++ |
| 195 }) | 195 }) |
| 196 | 196 |
| 197 if err == nil { | 197 if err == nil { |
| 198 err = lme.Get() | 198 err = lme.Get() |
| 199 } | 199 } |
| 200 return err | 200 return err |
| 201 } | 201 } |
| 202 | 202 |
| 203 func (d *datastoreImpl) DeleteMulti(keys []Key) (err error) { | 203 func (d *datastoreImpl) DeleteMulti(keys []Key) (err error) { |
| 204 » lme := errors.LazyMultiError{Size: len(keys)} | 204 » lme := errors.NewLazyMultiError(len(keys)) |
| 205 i := 0 | 205 i := 0 |
| 206 extErr := d.RawInterface.DeleteMulti(keys, func(internalErr error) { | 206 extErr := d.RawInterface.DeleteMulti(keys, func(internalErr error) { |
| 207 lme.Assign(i, internalErr) | 207 lme.Assign(i, internalErr) |
| 208 i++ | 208 i++ |
| 209 }) | 209 }) |
| 210 err = lme.Get() | 210 err = lme.Get() |
| 211 if err == nil { | 211 if err == nil { |
| 212 err = extErr | 212 err = extErr |
| 213 } | 213 } |
| 214 return | 214 return |
| 215 } | 215 } |
| 216 | 216 |
| 217 func (d *datastoreImpl) Raw() RawInterface { | 217 func (d *datastoreImpl) Raw() RawInterface { |
| 218 return d.RawInterface | 218 return d.RawInterface |
| 219 } | 219 } |
| OLD | NEW |