| OLD | NEW |
| 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 memory | 5 package memory |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "bytes" | 8 "bytes" |
| 9 "errors" | 9 "errors" |
| 10 "fmt" | 10 "fmt" |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 64 func (s *projectionStrategy) handle(rawData [][]byte, decodedProps []ds.Property
, key *ds.Key, gc func() (ds.Cursor, error)) error { | 64 func (s *projectionStrategy) handle(rawData [][]byte, decodedProps []ds.Property
, key *ds.Key, gc func() (ds.Cursor, error)) error { |
| 65 projectedRaw := [][]byte(nil) | 65 projectedRaw := [][]byte(nil) |
| 66 if s.distinct != nil { | 66 if s.distinct != nil { |
| 67 projectedRaw = make([][]byte, len(decodedProps)) | 67 projectedRaw = make([][]byte, len(decodedProps)) |
| 68 } | 68 } |
| 69 pmap := make(ds.PropertyMap, len(s.project)) | 69 pmap := make(ds.PropertyMap, len(s.project)) |
| 70 for i, p := range s.project { | 70 for i, p := range s.project { |
| 71 if s.distinct != nil { | 71 if s.distinct != nil { |
| 72 projectedRaw[i] = rawData[p.suffixIndex] | 72 projectedRaw[i] = rawData[p.suffixIndex] |
| 73 } | 73 } |
| 74 » » pmap[p.propertyName] = []ds.Property{decodedProps[p.suffixIndex]
} | 74 » » pmap[p.propertyName] = decodedProps[p.suffixIndex] |
| 75 } | 75 } |
| 76 if s.distinct != nil { | 76 if s.distinct != nil { |
| 77 if !s.distinct.Add(string(serialize.Join(projectedRaw...))) { | 77 if !s.distinct.Add(string(serialize.Join(projectedRaw...))) { |
| 78 return nil | 78 return nil |
| 79 } | 79 } |
| 80 } | 80 } |
| 81 return s.cb(key, pmap, gc) | 81 return s.cb(key, pmap, gc) |
| 82 } | 82 } |
| 83 | 83 |
| 84 type keysOnlyStrategy struct { | 84 type keysOnlyStrategy struct { |
| (...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 291 keyProp := decodedProps[len(decodedProps)-1] | 291 keyProp := decodedProps[len(decodedProps)-1] |
| 292 if keyProp.Type() != ds.PTKey { | 292 if keyProp.Type() != ds.PTKey { |
| 293 impossible(fmt.Errorf("decoded index row doesn't end wit
h a Key: %#v", keyProp)) | 293 impossible(fmt.Errorf("decoded index row doesn't end wit
h a Key: %#v", keyProp)) |
| 294 } | 294 } |
| 295 | 295 |
| 296 return strategy.handle( | 296 return strategy.handle( |
| 297 rawData, decodedProps, keyProp.Value().(*ds.Key), | 297 rawData, decodedProps, keyProp.Value().(*ds.Key), |
| 298 getCursorFn(suffix)) | 298 getCursorFn(suffix)) |
| 299 }) | 299 }) |
| 300 } | 300 } |
| OLD | NEW |