Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 datastore | 5 package datastore |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "errors" | 8 "errors" |
| 9 "fmt" | 9 "fmt" |
| 10 "math" | 10 "math" |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 105 // PropertyType is a single-byte representation of the type of data contained | 105 // PropertyType is a single-byte representation of the type of data contained |
| 106 // in a Property. The specific values of this type information are chosen so | 106 // in a Property. The specific values of this type information are chosen so |
| 107 // that the types sort according to the order of types as sorted by the | 107 // that the types sort according to the order of types as sorted by the |
| 108 // datastore. | 108 // datastore. |
| 109 type PropertyType byte | 109 type PropertyType byte |
| 110 | 110 |
| 111 // These constants are in the order described by | 111 // These constants are in the order described by |
| 112 // https://cloud.google.com/appengine/docs/go/datastore/entities#Go_Value_type _ordering | 112 // https://cloud.google.com/appengine/docs/go/datastore/entities#Go_Value_type _ordering |
| 113 // with a slight divergence for the Int/Time split. | 113 // with a slight divergence for the Int/Time split. |
| 114 // NOTE: this enum can only occupy 7 bits, because we use the high bit to encode | 114 // NOTE: this enum can only occupy 7 bits, because we use the high bit to encode |
| 115 // indexed/non-indexed. See typData.WriteBinary. | 115 // indexed/non-indexed. See serialize.WriteProperty. |
| 116 const ( | 116 const ( |
| 117 PTNull PropertyType = iota | 117 PTNull PropertyType = iota |
| 118 PTInt | 118 PTInt |
| 119 | 119 |
| 120 // PTTime is a slight divergence from the way that datastore natively st ores | 120 // PTTime is a slight divergence from the way that datastore natively st ores |
| 121 // time. In datastore, times and integers actually sort together | 121 // time. In datastore, times and integers actually sort together |
| 122 // (apparently?). This is probably insane, and I don't want to add the | 122 // (apparently?). This is probably insane, and I don't want to add the |
| 123 // complexity of field 'meaning' as a sparate concept from the field's ' type' | 123 // complexity of field 'meaning' as a sparate concept from the field's ' type' |
| 124 // (which is what datastore seems to do, judging from the protobufs). So if | 124 // (which is what datastore seems to do, judging from the protobufs). So if |
| 125 // you're here because you implemented an app which relies on time.Time and | 125 // you're here because you implemented an app which relies on time.Time and |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 139 PTBoolFalse | 139 PTBoolFalse |
| 140 PTBoolTrue | 140 PTBoolTrue |
| 141 | 141 |
| 142 PTBytes // []byte or datastore.ByteString | 142 PTBytes // []byte or datastore.ByteString |
| 143 PTString // string or string noindex | 143 PTString // string or string noindex |
| 144 PTFloat | 144 PTFloat |
| 145 PTGeoPoint | 145 PTGeoPoint |
| 146 PTKey | 146 PTKey |
| 147 PTBlobKey | 147 PTBlobKey |
| 148 | 148 |
| 149 // NOTE: THIS MUST BE LAST VALUE FOR THE init() ASSERTION BELOW TO WORK. | |
| 149 PTUnknown | 150 PTUnknown |
| 150 ) | 151 ) |
| 151 | 152 |
| 153 func init() { | |
| 154 if PTUnknown > 0x7f { | |
|
dnj (Google)
2015/08/23 06:50:07
IMO put this check in "serialize", as it owns the
iannucci
2015/08/23 18:19:43
It's better here. There are actually 2 modules tha
| |
| 155 panic( | |
| 156 "PTUnknown (and therefore PropertyType) exceeds 0x7f. Th is conflicts " + | |
| 157 "with serialize.WriteProperty's use of the high bit to indicate " + | |
| 158 "NoIndex.") | |
| 159 } | |
| 160 } | |
| 161 | |
| 152 func (t PropertyType) String() string { | 162 func (t PropertyType) String() string { |
| 153 switch t { | 163 switch t { |
| 154 case PTNull: | 164 case PTNull: |
| 155 return "PTNull" | 165 return "PTNull" |
| 156 case PTInt: | 166 case PTInt: |
| 157 return "PTInt" | 167 return "PTInt" |
| 158 case PTTime: | 168 case PTTime: |
| 159 return "PTTime" | 169 return "PTTime" |
| 160 case PTBoolFalse: | 170 case PTBoolFalse: |
| 161 return "PTBoolFalse" | 171 return "PTBoolFalse" |
| (...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 498 dflt = UpconvertUnderlyingType(dflt) | 508 dflt = UpconvertUnderlyingType(dflt) |
| 499 cur, err := gm(key) | 509 cur, err := gm(key) |
| 500 if err != nil { | 510 if err != nil { |
| 501 return dflt | 511 return dflt |
| 502 } | 512 } |
| 503 if dflt != nil && reflect.TypeOf(cur) != reflect.TypeOf(dflt) { | 513 if dflt != nil && reflect.TypeOf(cur) != reflect.TypeOf(dflt) { |
| 504 return dflt | 514 return dflt |
| 505 } | 515 } |
| 506 return cur | 516 return cur |
| 507 } | 517 } |
| OLD | NEW |