@@ -120,11 +120,17 @@ func FromEvent(ctx context.Context, db *icingadb.DB, ev *event.Event) (*Object,
120
120
cacheMu .Lock ()
121
121
defer cacheMu .Unlock ()
122
122
123
- object , ok := cache [id .String ()]
124
- if ! ok {
125
- object = New (db , ev )
126
- object .ID = id
127
- cache [id .String ()] = object
123
+ newObject := new (Object )
124
+ object , objectExists := cache [id .String ()]
125
+ if ! objectExists {
126
+ newObject = New (db , ev )
127
+ newObject .ID = id
128
+ } else {
129
+ * newObject = * object
130
+
131
+ newObject .ExtraTags = ev .ExtraTags
132
+ newObject .Name = ev .Name
133
+ newObject .URL = utils .ToDBString (ev .URL )
128
134
}
129
135
130
136
tx , err := db .BeginTxx (ctx , nil )
@@ -133,27 +139,27 @@ func FromEvent(ctx context.Context, db *icingadb.DB, ev *event.Event) (*Object,
133
139
}
134
140
defer func () { _ = tx .Rollback () }()
135
141
136
- stmt , _ := object . db .BuildUpsertStmt (& Object {})
137
- _ , err = tx .NamedExecContext (ctx , stmt , object )
142
+ stmt , _ := db .BuildUpsertStmt (& Object {})
143
+ _ , err = tx .NamedExecContext (ctx , stmt , newObject )
138
144
if err != nil {
139
145
return nil , fmt .Errorf ("failed to insert object: %w" , err )
140
146
}
141
147
142
- stmt , _ = object . db .BuildUpsertStmt (& IdTagRow {})
143
- _ , err = tx .NamedExecContext (ctx , stmt , mapToTagRows (object .ID , ev .Tags ))
148
+ stmt , _ = db .BuildUpsertStmt (& IdTagRow {})
149
+ _ , err = tx .NamedExecContext (ctx , stmt , mapToTagRows (newObject .ID , ev .Tags ))
144
150
if err != nil {
145
151
return nil , fmt .Errorf ("failed to upsert object id tags: %w" , err )
146
152
}
147
153
148
- extraTag := & ExtraTagRow {ObjectId : object .ID }
154
+ extraTag := & ExtraTagRow {ObjectId : newObject .ID }
149
155
_ , err = tx .NamedExecContext (ctx , `DELETE FROM "object_extra_tag" WHERE "object_id" = :object_id` , extraTag )
150
156
if err != nil {
151
157
return nil , fmt .Errorf ("failed to delete object extra tags: %w" , err )
152
158
}
153
159
154
160
if len (ev .ExtraTags ) > 0 {
155
- stmt , _ := object . db .BuildInsertStmt (extraTag )
156
- _ , err = tx .NamedExecContext (ctx , stmt , mapToTagRows (object .ID , ev .ExtraTags ))
161
+ stmt , _ := db .BuildInsertStmt (extraTag )
162
+ _ , err = tx .NamedExecContext (ctx , stmt , mapToTagRows (newObject .ID , ev .ExtraTags ))
157
163
if err != nil {
158
164
return nil , fmt .Errorf ("failed to insert object extra tags: %w" , err )
159
165
}
@@ -163,9 +169,12 @@ func FromEvent(ctx context.Context, db *icingadb.DB, ev *event.Event) (*Object,
163
169
return nil , fmt .Errorf ("can't commit object database transaction: %w" , err )
164
170
}
165
171
166
- object .ExtraTags = ev .ExtraTags
167
- object .Name = ev .Name
168
- object .URL = utils .ToDBString (ev .URL )
172
+ if ! objectExists {
173
+ cache [id .String ()] = newObject
174
+ return newObject , nil
175
+ }
176
+
177
+ * object = * newObject
169
178
170
179
return object , nil
171
180
}
0 commit comments