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

Side by Side Diff: impl/memory/datastore_query_execution.go

Issue 2342063003: Differentiate between single- and multi- props. (Closed)
Patch Set: Slice is now always a clone. This is marginally worse performance, but a much safer UI. 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
« no previous file with comments | « impl/memory/datastore_index_test.go ('k') | impl/memory/datastore_test.go » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 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
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
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 }
OLDNEW
« no previous file with comments | « impl/memory/datastore_index_test.go ('k') | impl/memory/datastore_test.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698