Skip to content

Commit d78384b

Browse files
authored
Merge pull request #25 from mnussbaum/fix_update_with_relation_pointer
fix: Avoid invalid SQL for updating structs with relation pointers
2 parents e8f043d + 5327a6a commit d78384b

File tree

2 files changed

+8
-3
lines changed

2 files changed

+8
-3
lines changed

Diff for: version.go

+3
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,9 @@ func (v VersionUpdateClause) ModifyStatement(stmt *gorm.Statement) {
141141
if field.DBName == v.Field.DBName {
142142
continue
143143
}
144+
if field.DBName == "" {
145+
continue
146+
}
144147

145148
if v, ok := selectColumns[field.DBName]; (ok && v) || (!ok && (!restricted || !stmt.SkipHooks)) {
146149
if field.AutoUpdateTime > 0 {

Diff for: version_test.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -198,12 +198,14 @@ func TestEmbed(t *testing.T) {
198198

199199
account := Account{
200200
UserID: 1,
201+
User: &user,
201202
Amount: 1000,
202203
Ext: Ext{CreditCard: []string{"123456", "456123"}},
203204
}
204205
_ = DB.Migrator().DropTable(&Account{})
205206
_ = DB.AutoMigrate(&Account{})
206-
DB.Save(&account)
207+
require.Nil(t, DB.Save(&account).Error)
208+
require.Nil(t, DB.Save(&account).Error)
207209

208210
sql := DB.Session(&gorm.Session{DryRun: true}).Updates(&account).Statement.SQL.String()
209211
require.Contains(t, sql, "`updated_at`=?")
@@ -232,8 +234,8 @@ func TestEmbed(t *testing.T) {
232234
var a1 Account
233235
require.Nil(t, DB.First(&a1).Error)
234236
require.Equal(t, a.Amount, a1.Amount)
235-
require.Equal(t, int64(2), a.Version.Int64)
236-
require.Equal(t, int64(3), a1.Version.Int64)
237+
require.Equal(t, int64(3), a.Version.Int64)
238+
require.Equal(t, int64(4), a1.Version.Int64)
237239
}
238240

239241
// use gorm.io/gorm/tests docker compose file

0 commit comments

Comments
 (0)