fix: reset null value in slice
This commit is contained in:
		
							parent
							
								
									d01de7232b
								
							
						
					
					
						commit
						ebac31ea48
					
				@ -587,6 +587,8 @@ func (field *Field) setupValuerAndSetter() {
 | 
				
			|||||||
			case **bool:
 | 
								case **bool:
 | 
				
			||||||
				if data != nil && *data != nil {
 | 
									if data != nil && *data != nil {
 | 
				
			||||||
					field.ReflectValueOf(ctx, value).SetBool(**data)
 | 
										field.ReflectValueOf(ctx, value).SetBool(**data)
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										field.ReflectValueOf(ctx, value).SetBool(false)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			case bool:
 | 
								case bool:
 | 
				
			||||||
				field.ReflectValueOf(ctx, value).SetBool(data)
 | 
									field.ReflectValueOf(ctx, value).SetBool(data)
 | 
				
			||||||
@ -606,6 +608,8 @@ func (field *Field) setupValuerAndSetter() {
 | 
				
			|||||||
			case **int64:
 | 
								case **int64:
 | 
				
			||||||
				if data != nil && *data != nil {
 | 
									if data != nil && *data != nil {
 | 
				
			||||||
					field.ReflectValueOf(ctx, value).SetInt(**data)
 | 
										field.ReflectValueOf(ctx, value).SetInt(**data)
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										field.ReflectValueOf(ctx, value).SetInt(0)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			case int64:
 | 
								case int64:
 | 
				
			||||||
				field.ReflectValueOf(ctx, value).SetInt(data)
 | 
									field.ReflectValueOf(ctx, value).SetInt(data)
 | 
				
			||||||
@ -670,6 +674,8 @@ func (field *Field) setupValuerAndSetter() {
 | 
				
			|||||||
			case **uint64:
 | 
								case **uint64:
 | 
				
			||||||
				if data != nil && *data != nil {
 | 
									if data != nil && *data != nil {
 | 
				
			||||||
					field.ReflectValueOf(ctx, value).SetUint(**data)
 | 
										field.ReflectValueOf(ctx, value).SetUint(**data)
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										field.ReflectValueOf(ctx, value).SetUint(0)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			case uint64:
 | 
								case uint64:
 | 
				
			||||||
				field.ReflectValueOf(ctx, value).SetUint(data)
 | 
									field.ReflectValueOf(ctx, value).SetUint(data)
 | 
				
			||||||
@ -722,6 +728,8 @@ func (field *Field) setupValuerAndSetter() {
 | 
				
			|||||||
			case **float64:
 | 
								case **float64:
 | 
				
			||||||
				if data != nil && *data != nil {
 | 
									if data != nil && *data != nil {
 | 
				
			||||||
					field.ReflectValueOf(ctx, value).SetFloat(**data)
 | 
										field.ReflectValueOf(ctx, value).SetFloat(**data)
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										field.ReflectValueOf(ctx, value).SetFloat(0)
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			case float64:
 | 
								case float64:
 | 
				
			||||||
				field.ReflectValueOf(ctx, value).SetFloat(data)
 | 
									field.ReflectValueOf(ctx, value).SetFloat(data)
 | 
				
			||||||
@ -766,6 +774,8 @@ func (field *Field) setupValuerAndSetter() {
 | 
				
			|||||||
			case **string:
 | 
								case **string:
 | 
				
			||||||
				if data != nil && *data != nil {
 | 
									if data != nil && *data != nil {
 | 
				
			||||||
					field.ReflectValueOf(ctx, value).SetString(**data)
 | 
										field.ReflectValueOf(ctx, value).SetString(**data)
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										field.ReflectValueOf(ctx, value).SetString("")
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
			case string:
 | 
								case string:
 | 
				
			||||||
				field.ReflectValueOf(ctx, value).SetString(data)
 | 
									field.ReflectValueOf(ctx, value).SetString(data)
 | 
				
			||||||
 | 
				
			|||||||
@ -1258,3 +1258,54 @@ func TestQueryScannerWithSingleColumn(t *testing.T) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	AssertEqual(t, result2.data, 20)
 | 
						AssertEqual(t, result2.data, 20)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestQueryResetNullValue(t *testing.T) {
 | 
				
			||||||
 | 
						type QueryResetNullValue struct {
 | 
				
			||||||
 | 
							ID      int
 | 
				
			||||||
 | 
							Name    string     `gorm:"default:NULL"`
 | 
				
			||||||
 | 
							Flag    bool       `gorm:"default:NULL"`
 | 
				
			||||||
 | 
							Number1 int64      `gorm:"default:NULL"`
 | 
				
			||||||
 | 
							Number2 uint64     `gorm:"default:NULL"`
 | 
				
			||||||
 | 
							Number3 float64    `gorm:"default:NULL"`
 | 
				
			||||||
 | 
							Now     *time.Time `gorm:"defalut:NULL"`
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						DB.Migrator().DropTable(&QueryResetNullValue{})
 | 
				
			||||||
 | 
						DB.AutoMigrate(&QueryResetNullValue{})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						now := time.Now()
 | 
				
			||||||
 | 
						q1 := QueryResetNullValue{
 | 
				
			||||||
 | 
							Name:    "name",
 | 
				
			||||||
 | 
							Flag:    true,
 | 
				
			||||||
 | 
							Number1: 100,
 | 
				
			||||||
 | 
							Number2: 200,
 | 
				
			||||||
 | 
							Number3: 300.1,
 | 
				
			||||||
 | 
							Now:     &now,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						q2 := QueryResetNullValue{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var err error
 | 
				
			||||||
 | 
						err = DB.Create(&q1).Error
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Errorf("failed to create:%v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						err = DB.Create(&q2).Error
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Errorf("failed to create:%v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var qs []QueryResetNullValue
 | 
				
			||||||
 | 
						err = DB.Find(&qs).Error
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Errorf("failed to find:%v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if len(qs) != 2 {
 | 
				
			||||||
 | 
							t.Fatalf("find count not equal:%d", len(qs))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						AssertEqual(t, q1, qs[0])
 | 
				
			||||||
 | 
						AssertEqual(t, q2, qs[1])
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user