package
0.8.2
Repository: https://github.com/tomcz/gotools.git
Documentation: pkg.go.dev

# Packages

No description provided by the author

# README

sqls

SQL helper functions for queries and transactions to remove common boilerplate code.

import (
	"context"
	"database/sql"
	"github.com/tomcz/gotools/sqls"
)

func main() {
	ctx := context.Background()

	var db *sql.DB // initialisation omitted

	results := make(map[string]string)

	selectLeadersSQL := "select leader, node from current_leaders"
	err := sqls.QueryRowsContext(ctx, db, selectLeadersSQL)(func(row sqls.ScanFunc) error {
		var leader, node string
		if err := row(&leader, &node); err != nil {
			return nil
		}
		results[leader] = node
		return nil
	})
	// error handling omitted

	insertLeaderSQL := "insert into old_leaders (leader, node, created_at) values (?, ?, ?)"
	err = sqls.InTxContext(ctx, db, func(tx *sql.Tx) error {
		for leader, node := range results {
			_, err := tx.ExecContext(ctx, insertLeaderSQL, leader, node, time.Now())
			if err != nil {
				return err // tx will be rolled-back
			}
		}
		return nil // tx will be committed
	})
	// error handling omitted
}