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

Unified Diff: service/datastore/serialize/serialize.go

Issue 1550903002: impl/memory: Fix time serialization encoding. (Closed) Base URL: https://github.com/luci/gae@master
Patch Set: Created 5 years 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 side-by-side diff with in-line comments
Download patch
Index: service/datastore/serialize/serialize.go
diff --git a/service/datastore/serialize/serialize.go b/service/datastore/serialize/serialize.go
index 736010820f222499212728ca30154029a905cc4f..a6210c6b49f6ed381b397f6fbdc6408316b35bf2 100644
--- a/service/datastore/serialize/serialize.go
+++ b/service/datastore/serialize/serialize.go
@@ -189,6 +189,13 @@ func ReadGeoPoint(buf Buffer) (gp ds.GeoPoint, err error) {
return
}
+// timeToInt converts a time value to an integer value. See WriteTime for more
+// details.
+func timeToInt(t time.Time) int64 {
+ t = t.Round(time.Microsecond)
+ return t.Unix()*1e6 + int64(t.Nanosecond()/1e3)
+}
+
// WriteTime writes a time.Time in a byte-sortable way.
//
// This method truncates the time to microseconds and drops the timezone,
@@ -198,7 +205,7 @@ func WriteTime(buf Buffer, t time.Time) error {
if name != "UTC" || off != 0 {
panic(fmt.Errorf("helper: UTC OR DEATH: %s", t))
}
- _, err := cmpbin.WriteInt(buf, t.Unix()*1e6+int64(t.Nanosecond()/1e3))
+ _, err := cmpbin.WriteInt(buf, timeToInt(t))
return err
}
@@ -220,7 +227,14 @@ func ReadTime(buf Buffer) (time.Time, error) {
// Key as its Value.
func WriteProperty(buf Buffer, context KeyContext, p ds.Property) (err error) {
defer recoverTo(&err)
- typb := byte(p.Type())
+
+ effectiveType := p.Type()
+ switch effectiveType {
+ case ds.PTTime:
dnj 2015/12/29 16:48:09 I made this a switch statement in case there were
+ effectiveType = ds.PTInt
+ }
+ typb := byte(effectiveType)
iannucci 2015/12/29 18:29:20 This change is not good; it will call property map
+
if p.IndexSetting() != ds.NoIndex {
typb |= 0x80
}

Powered by Google App Engine
This is Rietveld 408576698