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

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

Issue 1355783002: Refactor keys and queries in datastore service and implementation. (Closed) Base URL: https://github.com/luci/gae.git@master
Patch Set: Created 5 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 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 memory 5 package memory
6 6
7 import ( 7 import (
8 "bytes" 8 "bytes"
9 "fmt" 9 "fmt"
10 "strings" 10 "strings"
11 "time" 11 "time"
12 12
13 ds "github.com/luci/gae/service/datastore" 13 ds "github.com/luci/gae/service/datastore"
14 "github.com/luci/gae/service/datastore/dskey"
15 "github.com/luci/gae/service/datastore/serialize" 14 "github.com/luci/gae/service/datastore/serialize"
16 "github.com/luci/luci-go/common/cmpbin" 15 "github.com/luci/luci-go/common/cmpbin"
17 ) 16 )
18 17
19 func init() { 18 func init() {
20 serializationDeterministic = true 19 serializationDeterministic = true
21 serialize.WritePropertyMapDeterministic = true 20 serialize.WritePropertyMapDeterministic = true
22 } 21 }
23 22
24 var NEXT_STR = "NEXT MARKER" 23 var NEXT_STR = "NEXT MARKER"
(...skipping 27 matching lines...) Expand all
52 for len(stuff) > 0 && stuff[0] != NEXT { 51 for len(stuff) > 0 && stuff[0] != NEXT {
53 ret[pname] = append(ret[pname], prop(nom())) 52 ret[pname] = append(ret[pname], prop(nom()))
54 } 53 }
55 } 54 }
56 nom() 55 nom()
57 } 56 }
58 57
59 return ret 58 return ret
60 } 59 }
61 60
62 func nq(kind_ns ...string) ds.Query { 61 func nq(kindMaybe ...string) *ds.Query {
63 » if len(kind_ns) == 2 { 62 » kind := "Foo"
64 » » return &queryImpl{kind: kind_ns[0], ns: kind_ns[1]} 63 » if len(kindMaybe) == 1 {
65 » } else if len(kind_ns) == 1 { 64 » » kind = kindMaybe[0]
66 » » return &queryImpl{kind: kind_ns[0], ns: "ns"}
67 } 65 }
68 » return &queryImpl{kind: "Foo", ns: "ns"} 66 » return ds.NewQuery(kind)
iannucci 2015/09/18 04:31:52 Querys no longer embed the namespace and appid ins
69 } 67 }
70 68
71 func indx(kind string, orders ...string) *ds.IndexDefinition { 69 func indx(kind string, orders ...string) *ds.IndexDefinition {
72 ancestor := false 70 ancestor := false
73 if kind[len(kind)-1] == '!' { 71 if kind[len(kind)-1] == '!' {
74 ancestor = true 72 ancestor = true
75 kind = kind[:len(kind)-1] 73 kind = kind[:len(kind)-1]
76 } 74 }
77 ret := &ds.IndexDefinition{Kind: kind, Ancestor: ancestor} 75 ret := &ds.IndexDefinition{Kind: kind, Ancestor: ancestor}
78 for _, o := range orders { 76 for _, o := range orders {
79 dir := ds.ASCENDING 77 dir := ds.ASCENDING
80 if o[0] == '-' { 78 if o[0] == '-' {
81 dir = ds.DESCENDING 79 dir = ds.DESCENDING
82 o = o[1:] 80 o = o[1:]
83 } 81 }
84 ret.SortBy = append(ret.SortBy, ds.IndexColumn{Property: o, Dire ction: dir}) 82 ret.SortBy = append(ret.SortBy, ds.IndexColumn{Property: o, Dire ction: dir})
85 } 83 }
86 return ret 84 return ret
87 } 85 }
88 86
89 var ( 87 var (
90 prop = ds.MkProperty 88 prop = ds.MkProperty
91 propNI = ds.MkPropertyNI 89 propNI = ds.MkPropertyNI
92 ) 90 )
93 91
94 func key(kind string, id interface{}, parent ...ds.Key) ds.Key { 92 func key(elems ...interface{}) *ds.Key {
iannucci 2015/09/18 04:31:52 I had like 5 copies of this function all over the
95 » p := ds.Key(nil) 93 » return ds.MakeKey(globalAppID, "ns", elems...)
96 » if len(parent) > 0 {
97 » » p = parent[0]
98 » }
99 » switch x := id.(type) {
100 » case string:
101 » » return dskey.New(globalAppID, "ns", kind, x, 0, p)
102 » case int:
103 » » return dskey.New(globalAppID, "ns", kind, "", int64(x), p)
104 » default:
105 » » return dskey.New(globalAppID, "ns", kind, "invalid", 100, p)
106 » }
107 } 94 }
108 95
109 // cat is a convenience method for concatenating anything with an underlying 96 // cat is a convenience method for concatenating anything with an underlying
110 // byte representation into a single []byte. 97 // byte representation into a single []byte.
111 func cat(bytethings ...interface{}) []byte { 98 func cat(bytethings ...interface{}) []byte {
112 buf := &bytes.Buffer{} 99 buf := &bytes.Buffer{}
113 for _, thing := range bytethings { 100 for _, thing := range bytethings {
114 switch x := thing.(type) { 101 switch x := thing.(type) {
115 case int64: 102 case int64:
116 cmpbin.WriteInt(buf, x) 103 cmpbin.WriteInt(buf, x)
117 case int: 104 case int:
118 cmpbin.WriteInt(buf, int64(x)) 105 cmpbin.WriteInt(buf, int64(x))
119 case uint64: 106 case uint64:
120 cmpbin.WriteUint(buf, x) 107 cmpbin.WriteUint(buf, x)
121 case uint: 108 case uint:
122 cmpbin.WriteUint(buf, uint64(x)) 109 cmpbin.WriteUint(buf, uint64(x))
123 case float64: 110 case float64:
124 cmpbin.WriteFloat64(buf, x) 111 cmpbin.WriteFloat64(buf, x)
125 case byte: 112 case byte:
126 buf.WriteByte(x) 113 buf.WriteByte(x)
127 case ds.PropertyType: 114 case ds.PropertyType:
128 buf.WriteByte(byte(x)) 115 buf.WriteByte(byte(x))
129 case string: 116 case string:
130 cmpbin.WriteString(buf, x) 117 cmpbin.WriteString(buf, x)
131 case []byte: 118 case []byte:
132 buf.Write(x) 119 buf.Write(x)
133 case time.Time: 120 case time.Time:
134 serialize.WriteTime(buf, x) 121 serialize.WriteTime(buf, x)
135 » » case ds.Key: 122 » » case *ds.Key:
136 serialize.WriteKey(buf, serialize.WithoutContext, x) 123 serialize.WriteKey(buf, serialize.WithoutContext, x)
137 case *ds.IndexDefinition: 124 case *ds.IndexDefinition:
138 serialize.WriteIndexDefinition(buf, *x) 125 serialize.WriteIndexDefinition(buf, *x)
139 case ds.Property: 126 case ds.Property:
140 serialize.WriteProperty(buf, serialize.WithoutContext, x ) 127 serialize.WriteProperty(buf, serialize.WithoutContext, x )
141 default: 128 default:
142 panic(fmt.Errorf("I don't know how to deal with %T: %#v" , thing, thing)) 129 panic(fmt.Errorf("I don't know how to deal with %T: %#v" , thing, thing))
143 } 130 }
144 } 131 }
145 ret := buf.Bytes() 132 ret := buf.Bytes()
146 if ret == nil { 133 if ret == nil {
147 ret = []byte{} 134 ret = []byte{}
148 } 135 }
149 return ret 136 return ret
150 } 137 }
151 138
152 func icat(bytethings ...interface{}) []byte { 139 func icat(bytethings ...interface{}) []byte {
153 ret := cat(bytethings...) 140 ret := cat(bytethings...)
154 for i := range ret { 141 for i := range ret {
155 ret[i] ^= 0xFF 142 ret[i] ^= 0xFF
156 } 143 }
157 return ret 144 return ret
158 } 145 }
159 146
160 func sat(bytethings ...interface{}) string { 147 func sat(bytethings ...interface{}) string {
161 return string(cat(bytethings...)) 148 return string(cat(bytethings...))
162 } 149 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698