Skip to content

Commit c77925f

Browse files
authored
Merge pull request #13 from go-gorm/12-fix-auto-update-time-invalid
fix: auto update time invalid
2 parents 6cd4ac5 + 2567e4b commit c77925f

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

version.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,11 @@ func (v VersionUpdateClause) ModifyStatement(stmt *gorm.Statement) {
140140
continue
141141
}
142142

143-
if v, ok := selectColumns[field.DBName]; (ok && v) || (!ok && (!restricted || (!stmt.SkipHooks && field.AutoUpdateTime > 0))) {
143+
if v, ok := selectColumns[field.DBName]; (ok && v) || (!ok && (!restricted || !stmt.SkipHooks)) {
144+
if field.AutoUpdateTime > 0 {
145+
continue
146+
}
147+
144148
val, isZero := field.ValueOf(stmt.Context, dv)
145149
if (ok || !isZero) && field.Updatable {
146150
d[field.DBName] = val

version_test.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ func TestVersion(t *testing.T) {
4949
require.Equal(t, int64(2), user.Version.Int64)
5050
require.Equal(t, uint(18), user.Age)
5151
require.Equal(t, date, user.UpdatedAt)
52-
DB.NowFunc = time.Now().Local
52+
DB.NowFunc = time.Now
5353

5454
rows = DB.Model(&user).Update("age", 16).RowsAffected
5555
require.Equal(t, int64(1), rows)
@@ -100,6 +100,15 @@ func TestVersion(t *testing.T) {
100100
require.Contains(t, sql, "`version`=`version`+1")
101101
require.Contains(t, sql, "`version` = ?")
102102

103+
DB.NowFunc = func() time.Time {
104+
return date
105+
}
106+
user.Name = "micky"
107+
rows = DB.Updates(&user).RowsAffected
108+
require.Equal(t, int64(1), rows)
109+
require.Equal(t, date, user.UpdatedAt)
110+
DB.NowFunc = time.Now
111+
103112
// support create
104113
users := []User{{Name: "foo", Age: 30}, {Name: "bar", Age: 40, Version: Version{Int64: 100}}}
105114
DB.Create(&users)
@@ -191,7 +200,11 @@ func TestEmbed(t *testing.T) {
191200
DB.Save(&account)
192201

193202
sql := DB.Session(&gorm.Session{DryRun: true}).Updates(&account).Statement.SQL.String()
194-
require.Equal(t, "UPDATE `accounts` SET `amount`=?,`created_at`=?,`ext`=?,`id`=?,`updated_at`=?,`user_id`=?,`version`=`version`+1 WHERE `accounts`.`deleted_at` IS NULL AND `accounts`.`version` = ? AND `id` = ?", sql)
203+
require.Contains(t, sql, "`updated_at`=?")
204+
require.Contains(t, sql, "`version`=`version`+1")
205+
require.Contains(t, sql, "`user_id`=?")
206+
require.Contains(t, sql, "`ext`=?")
207+
require.Contains(t, sql, "`amount`=?")
195208

196209
var a Account
197210
DB.First(&a)

0 commit comments

Comments
 (0)