From 8cc025cd8e89196cf8932ef7e3b102e71772b8aa Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Wed, 1 Apr 2015 16:16:22 +0800 Subject: [PATCH] use gob to instead json to store pk & added json type --- cache.go | 19 ++++++++++++------- type.go | 4 +++- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/cache.go b/cache.go index 2a61ef75..bf81bd52 100644 --- a/cache.go +++ b/cache.go @@ -1,10 +1,11 @@ package core import ( - "encoding/json" "errors" "fmt" "time" + "bytes" + "encoding/gob" ) const ( @@ -47,16 +48,20 @@ type Cacher interface { } func encodeIds(ids []PK) (string, error) { - b, err := json.Marshal(ids) - if err != nil { - return "", err - } - return string(b), nil + buf := new(bytes.Buffer) + enc := gob.NewEncoder(buf) + err := enc.Encode(ids) + + return buf.String(), err } + func decodeIds(s string) ([]PK, error) { pks := make([]PK, 0) - err := json.Unmarshal([]byte(s), &pks) + + dec := gob.NewDecoder(bytes.NewBufferString(s)) + err := dec.Decode(&pks) + return pks, err } diff --git a/type.go b/type.go index 73b9921e..d577adac 100644 --- a/type.go +++ b/type.go @@ -101,6 +101,8 @@ var ( Serial = "SERIAL" BigSerial = "BIGSERIAL" + Json = "JSON" + SqlTypes = map[string]int{ Bit: NUMERIC_TYPE, TinyInt: NUMERIC_TYPE, @@ -112,6 +114,7 @@ var ( Enum: TEXT_TYPE, Set: TEXT_TYPE, + Json: TEXT_TYPE, Char: TEXT_TYPE, Varchar: TEXT_TYPE, @@ -229,7 +232,6 @@ var ( ) func Type2SQLType(t reflect.Type) (st SQLType) { - switch k := t.Kind(); k { case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32: st = SQLType{Int, 0, 0}