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 |