From 0a51f6cdc55d1650d9ed3b4c13026cfa9133b01e Mon Sep 17 00:00:00 2001 From: Aetheus Date: Tue, 10 Oct 2017 21:28:39 +0800 Subject: [PATCH] add JSONB type (#1626) * add JSONB type * add comments to satisfy gofmt --- dialects/postgres/postgres.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/dialects/postgres/postgres.go b/dialects/postgres/postgres.go index adeeec7b..b8e76891 100644 --- a/dialects/postgres/postgres.go +++ b/dialects/postgres/postgres.go @@ -6,6 +6,9 @@ import ( _ "github.com/lib/pq" "github.com/lib/pq/hstore" + "encoding/json" + "errors" + "fmt" ) type Hstore map[string]*string @@ -52,3 +55,23 @@ func (h *Hstore) Scan(value interface{}) error { return nil } + +// Jsonb Postgresql's JSONB data type +type Jsonb struct { + json.RawMessage +} + +// Value get value of Jsonb +func (j Jsonb) Value() (driver.Value, error) { + return j.MarshalJSON() +} + +// Scan scan value into Jsonb +func (j *Jsonb) Scan(value interface{}) error { + bytes, ok := value.([]byte) + if !ok { + return errors.New(fmt.Sprint("Failed to unmarshal JSONB value:", value)) + } + + return json.Unmarshal(bytes, j) +}