omnix-sopiga/framework/db/batch.go
2026-08-07 12:21:42 +07:00

31 lines
594 B
Go

package db
import (
"context"
"fmt"
"github.com/jackc/pgx/v5"
"github.com/jackc/pgx/v5/pgxpool"
)
func ExecBatch(ctx context.Context, pool *pgxpool.Pool, stmt string, args [][]any) (int64, error) {
batch := &pgx.Batch{}
for _, a := range args {
batch.Queue(stmt, a...)
}
results := pool.SendBatch(ctx, batch)
defer results.Close()
var rowsAffected int64
for i := 0; i < len(args); i++ {
tag, err := results.Exec()
if err != nil {
return rowsAffected, fmt.Errorf("exec batch item %d: %w", i, err)
}
rowsAffected += tag.RowsAffected()
}
return rowsAffected, nil
}