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

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

Issue 2342063003: Differentiate between single- and multi- props. (Closed)
Patch Set: Created 4 years, 3 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 LUCI Authors. All rights reserved. 1 // Copyright 2015 The LUCI Authors. All rights reserved.
2 // Use of this source code is governed under the Apache License, Version 2.0 2 // Use of this source code is governed under the Apache License, Version 2.0
3 // that can be found in the LICENSE file. 3 // that can be found in the LICENSE file.
4 4
5 package prod 5 package prod
6 6
7 import ( 7 import (
8 "fmt" 8 "fmt"
9 "reflect" 9 "reflect"
10 "time" 10 "time"
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 return ret, err 155 return ret, err
156 } 156 }
157 157
158 func (tf *typeFilter) Load(props []datastore.Property) error { 158 func (tf *typeFilter) Load(props []datastore.Property) error {
159 tf.pm = make(ds.PropertyMap, len(props)) 159 tf.pm = make(ds.PropertyMap, len(props))
160 for _, p := range props { 160 for _, p := range props {
161 prop, err := dsR2FProp(p) 161 prop, err := dsR2FProp(p)
162 if err != nil { 162 if err != nil {
163 return err 163 return err
164 } 164 }
165 » » tf.pm[p.Name] = append(tf.pm[p.Name], prop) 165
166 » » pdata := tf.pm[p.Name]
167 » » if p.Multiple {
168 » » » var pslice ds.PropertySlice
169 » » » if pdata != nil {
170 » » » » var ok bool
171 » » » » if pslice, ok = pdata.(ds.PropertySlice); !ok {
172 » » » » » return fmt.Errorf("mixed Multiple/non-Mu ltiple properties for %q", p.Name)
iannucci 2016/09/16 07:11:03 I don't think this is possible?
dnj 2016/09/16 19:07:22 It shouldn't be, but since we're sitting at an int
173 » » » » }
174 » » » }
175 » » » tf.pm[p.Name] = append(pslice, prop)
176 » » } else {
177 » » » if pdata != nil {
178 » » » » return fmt.Errorf("multiple properties for non-M ultiple %q", p.Name)
179 » » » }
180 » » » tf.pm[p.Name] = prop
181 » » }
166 } 182 }
167 return nil 183 return nil
168 } 184 }
169 185
170 func (tf *typeFilter) Save() ([]datastore.Property, error) { 186 func (tf *typeFilter) Save() ([]datastore.Property, error) {
171 props := []datastore.Property{} 187 props := []datastore.Property{}
172 » for name, propList := range tf.pm { 188 » for name, pdata := range tf.pm {
173 if len(name) != 0 && name[0] == '$' { 189 if len(name) != 0 && name[0] == '$' {
174 continue 190 continue
175 } 191 }
176 » » multiple := len(propList) > 1 192
177 » » for _, prop := range propList { 193 » » var (
194 » » » pslice ds.PropertySlice
195 » » » multiple bool
196 » » )
197 » » switch t := pdata.(type) {
198 » » case ds.Property:
199 » » » pslice = ds.PropertySlice{t}
200 » » case ds.PropertySlice:
201 » » » pslice, multiple = t, true
202 » » default:
203 » » » return nil, fmt.Errorf("unknown PropertyData type %T", t )
204 » » }
205
206 » » for _, prop := range pslice {
178 toAdd, err := dsF2RProp(tf.ctx, prop) 207 toAdd, err := dsF2RProp(tf.ctx, prop)
179 if err != nil { 208 if err != nil {
180 return nil, err 209 return nil, err
181 } 210 }
182 toAdd.Name = name 211 toAdd.Name = name
183 toAdd.Multiple = multiple 212 toAdd.Multiple = multiple
184 props = append(props, toAdd) 213 props = append(props, toAdd)
185 } 214 }
186 } 215 }
187 return props, nil 216 return props, nil
188 } 217 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698