From 78e9c9b7488fbc71bf2ab853db4490d241cb0ada Mon Sep 17 00:00:00 2001 From: Jinzhu Date: Thu, 3 Sep 2020 18:20:57 +0800 Subject: [PATCH] raise error when failed to parse default value, close #3378 --- schema/field.go | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/schema/field.go b/schema/field.go index b49b7de6..0cb210f8 100644 --- a/schema/field.go +++ b/schema/field.go @@ -70,6 +70,8 @@ type Field struct { } func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field { + var err error + field := &Field{ Name: fieldStruct.Name, BindNames: []string{fieldStruct.Name}, @@ -151,7 +153,6 @@ func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field { } if num, ok := field.TagSettings["SIZE"]; ok { - var err error if field.Size, err = strconv.Atoi(num); err != nil { field.Size = -1 } @@ -181,22 +182,30 @@ func (schema *Schema) ParseField(fieldStruct reflect.StructField) *Field { case reflect.Bool: field.DataType = Bool if field.HasDefaultValue && field.DefaultValue != "" { - field.DefaultValueInterface, _ = strconv.ParseBool(field.DefaultValue) + if field.DefaultValueInterface, err = strconv.ParseBool(field.DefaultValue); err != nil { + schema.err = fmt.Errorf("failed to parse %v as default value for bool, got error: %v", field.DefaultValue, err) + } } case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: field.DataType = Int if field.HasDefaultValue && field.DefaultValue != "" { - field.DefaultValueInterface, _ = strconv.ParseInt(field.DefaultValue, 0, 64) + if field.DefaultValueInterface, err = strconv.ParseInt(field.DefaultValue, 0, 64); err != nil { + schema.err = fmt.Errorf("failed to parse %v as default value for int, got error: %v", field.DefaultValue, err) + } } case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: field.DataType = Uint if field.HasDefaultValue && field.DefaultValue != "" { - field.DefaultValueInterface, _ = strconv.ParseUint(field.DefaultValue, 0, 64) + if field.DefaultValueInterface, err = strconv.ParseUint(field.DefaultValue, 0, 64); err != nil { + schema.err = fmt.Errorf("failed to parse %v as default value for uint, got error: %v", field.DefaultValue, err) + } } case reflect.Float32, reflect.Float64: field.DataType = Float if field.HasDefaultValue && field.DefaultValue != "" { - field.DefaultValueInterface, _ = strconv.ParseFloat(field.DefaultValue, 64) + if field.DefaultValueInterface, err = strconv.ParseFloat(field.DefaultValue, 64); err != nil { + schema.err = fmt.Errorf("failed to parse %v as default value for float, got error: %v", field.DefaultValue, err) + } } case reflect.String: field.DataType = String