github.com/aacfactory/fns-contrib/databases/sql@v1.2.84/dac/specifications/returning.go (about) 1 package specifications 2 3 import ( 4 "context" 5 "github.com/aacfactory/errors" 6 "github.com/aacfactory/fns-contrib/databases/sql" 7 ) 8 9 func WriteInsertReturning[T any](ctx context.Context, rows sql.Rows, returning []string, entries []T) (affected int64, err error) { 10 spec, specErr := GetSpecification(ctx, Instance[T]()) 11 if specErr != nil { 12 err = errors.Warning("sql: write returning value into entries failed").WithCause(specErr) 13 return 14 } 15 i := 0 16 for rows.Next() { 17 generics := acquireGenerics(len(returning)) 18 scanErr := rows.Scan(generics...) 19 if scanErr != nil { 20 releaseGenerics(generics) 21 err = errors.Warning("sql: write returning value into entries failed").WithCause(scanErr) 22 return 23 } 24 entry := entries[i] 25 wErr := generics.WriteTo(spec, returning, &entry) 26 if wErr != nil { 27 releaseGenerics(generics) 28 err = errors.Warning("sql: write returning value into entries failed").WithCause(wErr) 29 return 30 } 31 entries[i] = entry 32 affected++ 33 i++ 34 } 35 return 36 }