forked from mirror/gorm
time.Time, []byte type add alias support. (rebase master) (#4992)
* time.Time, []byte type add alias support * reformat
This commit is contained in:
parent
eae73624ad
commit
a0d6ff1fea
|
@ -346,7 +346,8 @@ func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field {
|
|||
}
|
||||
}
|
||||
|
||||
if _, ok := field.TagSettings["EMBEDDED"]; ok || (fieldStruct.Anonymous && !isValuer && (field.Creatable || field.Updatable || field.Readable)) {
|
||||
if _, ok := field.TagSettings["EMBEDDED"]; field.GORMDataType != Time && field.GORMDataType != Bytes &&
|
||||
(ok || (fieldStruct.Anonymous && !isValuer && (field.Creatable || field.Updatable || field.Readable))) {
|
||||
kind := reflect.Indirect(fieldValue).Kind()
|
||||
switch kind {
|
||||
case reflect.Struct:
|
||||
|
|
|
@ -262,21 +262,24 @@ func TestParseFieldWithPermission(t *testing.T) {
|
|||
}
|
||||
|
||||
type (
|
||||
ID int64
|
||||
INT int
|
||||
INT8 int8
|
||||
INT16 int16
|
||||
INT32 int32
|
||||
INT64 int64
|
||||
UINT uint
|
||||
UINT8 uint8
|
||||
UINT16 uint16
|
||||
UINT32 uint32
|
||||
UINT64 uint64
|
||||
FLOAT32 float32
|
||||
FLOAT64 float64
|
||||
BOOL bool
|
||||
STRING string
|
||||
ID int64
|
||||
INT int
|
||||
INT8 int8
|
||||
INT16 int16
|
||||
INT32 int32
|
||||
INT64 int64
|
||||
UINT uint
|
||||
UINT8 uint8
|
||||
UINT16 uint16
|
||||
UINT32 uint32
|
||||
UINT64 uint64
|
||||
FLOAT32 float32
|
||||
FLOAT64 float64
|
||||
BOOL bool
|
||||
STRING string
|
||||
TIME time.Time
|
||||
BYTES []byte
|
||||
|
||||
TypeAlias struct {
|
||||
ID
|
||||
INT `gorm:"column:fint"`
|
||||
|
@ -293,6 +296,8 @@ type (
|
|||
FLOAT64 `gorm:"column:ffloat64"`
|
||||
BOOL `gorm:"column:fbool"`
|
||||
STRING `gorm:"column:fstring"`
|
||||
TIME `gorm:"column:ftime"`
|
||||
BYTES `gorm:"column:fbytes"`
|
||||
}
|
||||
)
|
||||
|
||||
|
@ -318,6 +323,8 @@ func TestTypeAliasField(t *testing.T) {
|
|||
{Name: "FLOAT64", DBName: "ffloat64", BindNames: []string{"FLOAT64"}, DataType: schema.Float, Creatable: true, Updatable: true, Readable: true, Size: 64, Tag: `gorm:"column:ffloat64"`},
|
||||
{Name: "BOOL", DBName: "fbool", BindNames: []string{"BOOL"}, DataType: schema.Bool, Creatable: true, Updatable: true, Readable: true, Tag: `gorm:"column:fbool"`},
|
||||
{Name: "STRING", DBName: "fstring", BindNames: []string{"STRING"}, DataType: schema.String, Creatable: true, Updatable: true, Readable: true, Tag: `gorm:"column:fstring"`},
|
||||
{Name: "TIME", DBName: "ftime", BindNames: []string{"TIME"}, DataType: schema.Time, Creatable: true, Updatable: true, Readable: true, Tag: `gorm:"column:ftime"`},
|
||||
{Name: "BYTES", DBName: "fbytes", BindNames: []string{"BYTES"}, DataType: schema.Bytes, Creatable: true, Updatable: true, Readable: true, Tag: `gorm:"column:fbytes"`},
|
||||
}
|
||||
|
||||
for _, f := range fields {
|
||||
|
|
|
@ -232,6 +232,9 @@ func (stmt *Statement) AddVar(writer clause.Writer, vars ...interface{}) {
|
|||
case reflect.Slice, reflect.Array:
|
||||
if rv.Len() == 0 {
|
||||
writer.WriteString("(NULL)")
|
||||
} else if rv.Type().Elem() == reflect.TypeOf(uint8(0)) {
|
||||
stmt.Vars = append(stmt.Vars, v)
|
||||
stmt.DB.Dialector.BindVarTo(writer, stmt, v)
|
||||
} else {
|
||||
writer.WriteByte('(')
|
||||
for i := 0; i < rv.Len(); i++ {
|
||||
|
|
Loading…
Reference in New Issue