sqlutils

module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 2, 2025 License: MIT

README

Description

Module provides:

  • Package logsql that contains a wrap for logging database/sql events. Example:
package main

import (
	"database/sql"
	"database/sql/driver"
	"github.com/alsiberij/sqlutils/logsql"
	"log/slog"
)

type (
	MySlogLogger struct {
		logger *slog.Logger
	}
)

// Implement logsql.Logger interface!

func main() {
	var l *slog.Logger
	var dr driver.Driver
	var dsn string

	// Init l, dr, dsn

	loggedConnector := logsql.NewConnectorFromDriver(dr, dsn, logsql.Config{
		LogHandler: MySlogLogger{
			logger: l,
		},
	})

	db := sql.OpenDB(loggedConnector)
	// Everything you do with db will be logged via logsql.Logger interface
}
  • Package scan that has useful generic utils for handling sql.Rows. Example:
package main

import (
	"context"
	"database/sql"
	"github.com/alsiberij/sqlutils/scan"
)

type (
	User struct {
		Id    string `scan:"id"`
		Name  string `scan:"name"`
		Email string `scan:"email"`
	}
)

func getUsers(ctx context.Context, db *sql.DB) ([]User, error) {
	rows, err := db.QueryContext(ctx, `SELECT id, name, email FROM users`)
	if err != nil {
		return nil, err
	}
	defer rows.Close()

	return scan.CollectRows(rows, scan.StructTagCollectorRowCols[User])
}

func getUsersMap(ctx context.Context, db *sql.DB) (map[int]User, error) {
	rows, err := db.QueryContext(ctx, `SELECT id, id, name, email FROM users`)
	if err != nil {
		return nil, err
	}
	defer rows.Close()

	return scan.CollectRowsKV(rows, scan.StructTagCollectorRowColsKV[int, User])
}

func getUser(ctx context.Context, db *sql.DB, id int) (User, bool, error) {
	row := db.QueryRowContext(ctx, `SELECT id, name, email FROM users WHERE id = $1`, id)
	if row.Err() != nil {
		return User{}, false, row.Err()
	}

	return scan.CollectRow(row, scan.StructPosCollectorRow[User])
}

See more info in concrete types.

Directories

Path Synopsis
Package logsql provides wrapper for database/sql with Logger interface.
Package logsql provides wrapper for database/sql with Logger interface.
Package scan has useful functions for handling rows from Query, QueryRow, Exec:
Package scan has useful functions for handling rows from Query, QueryRow, Exec:

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL