Skip to content

Commit 4b224e8

Browse files
elvinchanlunny
authored andcommitted
Fix genUpdateColumns() should not ignore soft delete column when unscoped (go-xorm#1051)
1 parent 545f30f commit 4b224e8

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

session_update.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -443,7 +443,7 @@ func (session *Session) genUpdateColumns(bean interface{}) ([]string, []interfac
443443
}
444444
}
445445

446-
if col.IsDeleted || col.IsCreated {
446+
if (col.IsDeleted && !session.statement.unscoped) || col.IsCreated {
447447
continue
448448
}
449449

session_update_test.go

+48
Original file line numberDiff line numberDiff line change
@@ -1133,6 +1133,54 @@ func TestCreatedUpdated2(t *testing.T) {
11331133
assert.True(t, s2.UpdateAt.Unix() > s2.CreateAt.Unix())
11341134
}
11351135

1136+
func TestDeletedUpdate(t *testing.T) {
1137+
assert.NoError(t, prepareEngine())
1138+
1139+
type DeletedUpdatedStruct struct {
1140+
Id int64
1141+
Name string
1142+
DeletedAt time.Time `xorm:"deleted"`
1143+
}
1144+
1145+
assertSync(t, new(DeletedUpdatedStruct))
1146+
1147+
var s = DeletedUpdatedStruct{
1148+
Name: "test",
1149+
}
1150+
cnt, err := testEngine.Insert(&s)
1151+
assert.NoError(t, err)
1152+
assert.EqualValues(t, 1, cnt)
1153+
1154+
cnt, err = testEngine.ID(s.Id).Delete(&DeletedUpdatedStruct{})
1155+
assert.NoError(t, err)
1156+
assert.EqualValues(t, 1, cnt)
1157+
1158+
s.DeletedAt = time.Time{}
1159+
cnt, err = testEngine.Unscoped().Nullable("deleted_at").Update(&s)
1160+
assert.NoError(t, err)
1161+
assert.EqualValues(t, 1, cnt)
1162+
1163+
var s1 DeletedUpdatedStruct
1164+
has, err := testEngine.ID(s.Id).Get(&s1)
1165+
assert.EqualValues(t, true, has)
1166+
1167+
cnt, err = testEngine.ID(s.Id).Delete(&DeletedUpdatedStruct{})
1168+
assert.NoError(t, err)
1169+
assert.EqualValues(t, 1, cnt)
1170+
1171+
cnt, err = testEngine.ID(s.Id).Cols("deleted_at").Update(&DeletedUpdatedStruct{})
1172+
assert.EqualValues(t, "No content found to be updated", err.Error())
1173+
assert.EqualValues(t, 0, cnt)
1174+
1175+
cnt, err = testEngine.ID(s.Id).Unscoped().Cols("deleted_at").Update(&DeletedUpdatedStruct{})
1176+
assert.NoError(t, err)
1177+
assert.EqualValues(t, 1, cnt)
1178+
1179+
var s2 DeletedUpdatedStruct
1180+
has, err = testEngine.ID(s.Id).Get(&s2)
1181+
assert.EqualValues(t, true, has)
1182+
}
1183+
11361184
func TestUpdateMapCondition(t *testing.T) {
11371185
assert.NoError(t, prepareEngine())
11381186

0 commit comments

Comments
 (0)