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

Side by Side Diff: service/datastore/serialize/serialize.go

Issue 1334043003: Use int64 to store time.Time internally in memory implementation. (Closed) Base URL: https://github.com/luci/gae.git@master
Patch Set: remove debug panic 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
« no previous file with comments | « impl/memory/datastore_test.go ('k') | service/datastore/serialize/serialize_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 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 serialize 5 package serialize
6 6
7 import ( 7 import (
8 "bytes" 8 "bytes"
9 "errors" 9 "errors"
10 "fmt" 10 "fmt"
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 191
192 // WriteTime writes a time.Time in a byte-sortable way. 192 // WriteTime writes a time.Time in a byte-sortable way.
193 // 193 //
194 // This method truncates the time to microseconds and drops the timezone, 194 // This method truncates the time to microseconds and drops the timezone,
195 // because that's the (undocumented) way that the appengine SDK does it. 195 // because that's the (undocumented) way that the appengine SDK does it.
196 func WriteTime(buf Buffer, t time.Time) error { 196 func WriteTime(buf Buffer, t time.Time) error {
197 name, off := t.Zone() 197 name, off := t.Zone()
198 if name != "UTC" || off != 0 { 198 if name != "UTC" || off != 0 {
199 panic(fmt.Errorf("helper: UTC OR DEATH: %s", t)) 199 panic(fmt.Errorf("helper: UTC OR DEATH: %s", t))
200 } 200 }
201 » _, err := cmpbin.WriteUint(buf, uint64(t.Unix())*1e6+uint64(t.Nanosecond ()/1e3)) 201 » _, err := cmpbin.WriteInt(buf, t.Unix()*1e6+int64(t.Nanosecond()/1e3))
202 return err 202 return err
203 } 203 }
204 204
205 // ReadTime reads a time.Time from the buffer. 205 // ReadTime reads a time.Time from the buffer.
206 func ReadTime(buf Buffer) (time.Time, error) { 206 func ReadTime(buf Buffer) (time.Time, error) {
207 » v, _, err := cmpbin.ReadUint(buf) 207 » v, _, err := cmpbin.ReadInt(buf)
208 if err != nil { 208 if err != nil {
209 return time.Time{}, err 209 return time.Time{}, err
210 } 210 }
211 » return time.Unix(int64(v/1e6), int64((v%1e6)*1e3)).UTC(), nil 211 » return time.Unix(v/1e6, (v%1e6)*1e3).UTC(), nil
212 } 212 }
213 213
214 // WriteProperty writes a Property to the buffer. `context` behaves the same 214 // WriteProperty writes a Property to the buffer. `context` behaves the same
215 // way that it does for WriteKey, but only has an effect if `p` contains a 215 // way that it does for WriteKey, but only has an effect if `p` contains a
216 // Key as its Value. 216 // Key as its Value.
217 func WriteProperty(buf Buffer, context KeyContext, p ds.Property) (err error) { 217 func WriteProperty(buf Buffer, context KeyContext, p ds.Property) (err error) {
218 defer recoverTo(&err) 218 defer recoverTo(&err)
219 typb := byte(p.Type()) 219 typb := byte(p.Type())
220 if p.IndexSetting() != ds.NoIndex { 220 if p.IndexSetting() != ds.NoIndex {
221 typb |= 0x80 221 typb |= 0x80
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 } 542 }
543 } 543 }
544 544
545 func recoverTo(err *error) { 545 func recoverTo(err *error) {
546 if r := recover(); r != nil { 546 if r := recover(); r != nil {
547 if rerr := r.(parseError); rerr != nil { 547 if rerr := r.(parseError); rerr != nil {
548 *err = error(rerr) 548 *err = error(rerr)
549 } 549 }
550 } 550 }
551 } 551 }
OLDNEW
« no previous file with comments | « impl/memory/datastore_test.go ('k') | service/datastore/serialize/serialize_test.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698