Call oncreate callback if new elem created while loading

This commit is contained in:
2020-12-06 00:56:37 +01:00
parent 0bc4e62d80
commit 18d9f9bed3
4 changed files with 32 additions and 3 deletions
+14 -1
View File
@@ -78,12 +78,25 @@ func (d *Database) LoadArray(target interface{}, filters ...interface{}) (err er
value := reflect.New(targetSliceElemT.Elem())
err = result.Decode(value.Interface())
elem = value.Interface()
err = composed.OnCreate().Invoke(ctx, elem)
if err != nil {
return
}
if err == nil {
targetSliceV = reflect.Append(targetSliceV, value)
}
} else {
elem = targetSliceV.Index(i).Interface()
base.Reset(elem)
if created := base.Reset(elem); created {
err = composed.OnCreate().Invoke(ctx, elem)
}
if err != nil {
return
}
err = result.Decode(elem)
}
if err != nil {
+6 -1
View File
@@ -56,7 +56,12 @@ func (d *Database) LoadOne(target interface{}, filters ...interface{}) (err erro
return mongox.ErrNoDocuments
}
base.Reset(target)
if created := base.Reset(target); created {
err = composed.OnCreate().Invoke(ctx, target)
}
if err != nil {
return
}
err = result.Decode(target)
if err != nil {
+6 -1
View File
@@ -35,7 +35,12 @@ func (l *StreamLoader) DecodeNext() (err error) {
// Decode function decodes the current cursor document into the target
func (l *StreamLoader) Decode() (err error) {
base.Reset(l.target)
if created := base.Reset(l.target); created {
err = l.query.OnDecode().Invoke(l.ctx, l.target)
}
if err != nil {
return
}
err = l.cur.Decode(l.target)
if err != nil {