Skip to content
This repository was archived by the owner on Sep 7, 2021. It is now read-only.
This repository is currently being migrated. It's locked while the migration is in progress.

Commit 4b224e8

Browse files
elvinchanlunny
authored andcommitted
Fix genUpdateColumns() should not ignore soft delete column when unscoped (#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

Lines changed: 1 addition & 1 deletion
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

Lines changed: 48 additions & 0 deletions
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)