forked from mirror/gorm
Adding json type for mssql dialect, similar to postgres.Jsonb (#1934)
* Adding json type for mssql dialect, similar to postgres.Jsonb * Adding proper comments
This commit is contained in:
parent
0fd395ab37
commit
dbb25e9487
|
@ -1,12 +1,16 @@
|
||||||
package mssql
|
package mssql
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"database/sql/driver"
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"reflect"
|
"reflect"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
// Importing mssql driver package only in dialect file, otherwide not needed
|
||||||
_ "github.com/denisenkom/go-mssqldb"
|
_ "github.com/denisenkom/go-mssqldb"
|
||||||
"github.com/jinzhu/gorm"
|
"github.com/jinzhu/gorm"
|
||||||
)
|
)
|
||||||
|
@ -201,3 +205,27 @@ func currentDatabaseAndTable(dialect gorm.Dialect, tableName string) (string, st
|
||||||
}
|
}
|
||||||
return dialect.CurrentDatabase(), tableName
|
return dialect.CurrentDatabase(), tableName
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// JSON type to support easy handling of JSON data in character table fields
|
||||||
|
// using golang json.RawMessage for deferred decoding/encoding
|
||||||
|
type JSON struct {
|
||||||
|
json.RawMessage
|
||||||
|
}
|
||||||
|
|
||||||
|
// Value get value of JSON
|
||||||
|
func (j JSON) Value() (driver.Value, error) {
|
||||||
|
if len(j.RawMessage) == 0 {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
return j.MarshalJSON()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Scan scan value into JSON
|
||||||
|
func (j *JSON) Scan(value interface{}) error {
|
||||||
|
str, ok := value.(string)
|
||||||
|
if !ok {
|
||||||
|
return errors.New(fmt.Sprint("Failed to unmarshal JSONB value (strcast):", value))
|
||||||
|
}
|
||||||
|
bytes := []byte(str)
|
||||||
|
return json.Unmarshal(bytes, j)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue