forked from mirror/gorm
Fix []byte support
This commit is contained in:
parent
96368eb967
commit
07960fe661
|
@ -214,7 +214,7 @@ func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field {
|
||||||
field.DataType = Time
|
field.DataType = Time
|
||||||
}
|
}
|
||||||
case reflect.Array, reflect.Slice:
|
case reflect.Array, reflect.Slice:
|
||||||
if fieldValue.Type().Elem() == reflect.TypeOf(uint8(0)) {
|
if reflect.Indirect(fieldValue).Type().Elem() == reflect.TypeOf(uint8(0)) {
|
||||||
field.DataType = Bytes
|
field.DataType = Bytes
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -160,6 +160,9 @@ func (stmt *Statement) AddVar(writer clause.Writer, vars ...interface{}) {
|
||||||
case driver.Valuer:
|
case driver.Valuer:
|
||||||
stmt.Vars = append(stmt.Vars, v)
|
stmt.Vars = append(stmt.Vars, v)
|
||||||
stmt.DB.Dialector.BindVarTo(writer, stmt, v)
|
stmt.DB.Dialector.BindVarTo(writer, stmt, v)
|
||||||
|
case []byte:
|
||||||
|
stmt.Vars = append(stmt.Vars, v)
|
||||||
|
stmt.DB.Dialector.BindVarTo(writer, stmt, v)
|
||||||
case []interface{}:
|
case []interface{}:
|
||||||
if len(v) > 0 {
|
if len(v) > 0 {
|
||||||
writer.WriteByte('(')
|
writer.WriteByte('(')
|
||||||
|
|
|
@ -17,7 +17,7 @@ import (
|
||||||
func TestScannerValuer(t *testing.T) {
|
func TestScannerValuer(t *testing.T) {
|
||||||
DB.Migrator().DropTable(&ScannerValuerStruct{})
|
DB.Migrator().DropTable(&ScannerValuerStruct{})
|
||||||
if err := DB.Migrator().AutoMigrate(&ScannerValuerStruct{}); err != nil {
|
if err := DB.Migrator().AutoMigrate(&ScannerValuerStruct{}); err != nil {
|
||||||
t.Errorf("no error should happen when migrate scanner, valuer struct")
|
t.Fatalf("no error should happen when migrate scanner, valuer struct, got error %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
data := ScannerValuerStruct{
|
data := ScannerValuerStruct{
|
||||||
|
@ -28,6 +28,7 @@ func TestScannerValuer(t *testing.T) {
|
||||||
Height: sql.NullFloat64{Float64: 1.8888, Valid: true},
|
Height: sql.NullFloat64{Float64: 1.8888, Valid: true},
|
||||||
Birthday: sql.NullTime{Time: time.Now(), Valid: true},
|
Birthday: sql.NullTime{Time: time.Now(), Valid: true},
|
||||||
Password: EncryptedData("pass1"),
|
Password: EncryptedData("pass1"),
|
||||||
|
Bytes: []byte("byte"),
|
||||||
Num: 18,
|
Num: 18,
|
||||||
Strings: StringsSlice{"a", "b", "c"},
|
Strings: StringsSlice{"a", "b", "c"},
|
||||||
Structs: StructsSlice{
|
Structs: StructsSlice{
|
||||||
|
@ -38,16 +39,16 @@ func TestScannerValuer(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := DB.Create(&data).Error; err != nil {
|
if err := DB.Create(&data).Error; err != nil {
|
||||||
t.Errorf("No error should happened when create scanner valuer struct, but got %v", err)
|
t.Fatalf("No error should happened when create scanner valuer struct, but got %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
var result ScannerValuerStruct
|
var result ScannerValuerStruct
|
||||||
|
|
||||||
if err := DB.Find(&result).Error; err != nil {
|
if err := DB.Find(&result).Error; err != nil {
|
||||||
t.Errorf("no error should happen when query scanner, valuer struct, but got %v", err)
|
t.Fatalf("no error should happen when query scanner, valuer struct, but got %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
AssertObjEqual(t, data, result, "Name", "Gender", "Age", "Male", "Height", "Birthday", "Password", "Num", "Strings", "Structs")
|
AssertObjEqual(t, data, result, "Name", "Gender", "Age", "Male", "Height", "Birthday", "Password", "Bytes", "Num", "Strings", "Structs")
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestScannerValuerWithFirstOrCreate(t *testing.T) {
|
func TestScannerValuerWithFirstOrCreate(t *testing.T) {
|
||||||
|
@ -130,6 +131,7 @@ type ScannerValuerStruct struct {
|
||||||
Height sql.NullFloat64
|
Height sql.NullFloat64
|
||||||
Birthday sql.NullTime
|
Birthday sql.NullTime
|
||||||
Password EncryptedData
|
Password EncryptedData
|
||||||
|
Bytes []byte
|
||||||
Num Num
|
Num Num
|
||||||
Strings StringsSlice
|
Strings StringsSlice
|
||||||
Structs StructsSlice
|
Structs StructsSlice
|
||||||
|
|
Loading…
Reference in New Issue