3
0

Skip deleted values on insert, fix 0000-00-00 error

This commit is contained in:
Denis Arh 2020-03-09 10:12:42 +01:00
parent 76c15ca84f
commit 2f3919884e
3 changed files with 28 additions and 1 deletions

View File

@ -311,12 +311,16 @@ func (r record) DeleteValues(record *types.Record) error {
func (r record) UpdateValues(recordID uint64, rvs types.RecordValueSet) (err error) {
// Remove all records and prepare to be updated
// @todo be more selective and delete only removed values
// @todo be more selective and delete only removed and update/insert changed/new values
if _, err = r.db().Exec("DELETE FROM compose_record_value WHERE record_id = ?", recordID); err != nil {
return errors.Wrap(err, "could not remove record values")
}
err = rvs.Walk(func(value *types.RecordValue) error {
if value.DeletedAt != nil {
return nil
}
value.RecordID = recordID
return r.db().Insert("compose_record_value", value)
})

View File

@ -538,6 +538,8 @@ func (svc record) Update(upd *types.Record) (rec *types.Record, err error) {
return
}
upd.Values = upd.Values.GetClean()
// At this point we can return the value
rec = upd

View File

@ -104,6 +104,9 @@ func (set RecordValueSet) Has(name string, place uint) bool {
}
func (set RecordValueSet) SetUpdatedFlag(updated bool) {
for i := range set {
set[i].updated = updated
}
}
func (set RecordValueSet) GetUpdated() (out RecordValueSet) {
@ -120,6 +123,24 @@ func (set RecordValueSet) GetUpdated() (out RecordValueSet) {
return out
}
func (set RecordValueSet) GetClean() (out RecordValueSet) {
out = make([]*RecordValue, 0, len(set))
for s := range set {
if set[s].DeletedAt != nil {
continue
}
out = append(out, &RecordValue{
Name: set[s].Name,
Value: set[s].Value,
Ref: set[s].Ref,
Place: set[s].Place,
})
}
return out
}
// Merge merges old value set with new one and expects unchanged values to be in the new set
//
// This satisfies current requirements where record values are always