Categorygithub.com/k1LoW/sqlc-go-one-or-fail
modulepackage
0.3.1
Repository: https://github.com/k1low/sqlc-go-one-or-fail.git
Documentation: pkg.go.dev

# README

sqlc-go-one-or-fail

CI Coverage Code to Test Ratio Test Execution Time

sqlc-go-one-or-fail modifies the Go code generated by sqlc to fail if more than one record is retrieved in the :one command.

Usage

$ sqlc generate
$ sqlc-go-one-or-fail path/to/generated_by_sqlc/*.go

Before

const getAuthorByName = `-- name: GetAuthorByName :one
SELECT id, name, bio FROM authors
WHERE name = ?
`

func (q *Queries) GetAuthorByName(ctx context.Context, name string) (Author, error) {
	row := q.db.QueryRowContext(ctx, getAuthorByName, name)
	var i Author
	err := row.Scan(&i.ID, &i.Name, &i.Bio)
	return i, err
}

After

const getAuthorByName = `-- name: GetAuthorByName :one
SELECT id, name, bio FROM authors
WHERE name = ?
`

func (q *Queries) GetAuthorByName(ctx context.Context, name string) (Author, error) {
	rows, err := q.db.QueryContext(ctx, getAuthorByName, name)
	if err != nil {
		return Author{}, err
	}
	defer rows.Close()
	if !rows.Next() {
		if err := rows.Err(); err != nil {
			return Author{}, err
		}
		return Author{}, sql.ErrNoRows
	}
	var i Author
	if err := rows.Scan(&i.ID, &i.Name, &i.Bio); err != nil {
		return Author{}, err
	}
	if rows.Next() {
		return Author{}, fmt.Errorf("multiple records were retrieved when the following query was executed: %q", getAuthorByName)
	}
	if err := rows.Close(); err != nil {
		return Author{}, err
	}
	if err := rows.Err(); err != nil {
		return Author{}, err
	}
	return i, err

}

Install

deb:

$ export SQLC_GO_ONE_OR_FAIL_VERSION=X.X.X
$ curl -o sqlc-go-one-or-fail.deb -L https://github.com/k1LoW/sqlc-go-one-or-fail/releases/download/v$SQLC_GO_ONE_OR_FAIL_VERSION/sqlc-go-one-or-fail_$SQLC_GO_ONE_OR_FAIL_VERSION-1_amd64.deb
$ dpkg -i sqlc-go-one-or-fail.deb

RPM:

$ export SQLC_GO_ONE_OR_FAIL_VERSION=X.X.X
$ yum install https://github.com/k1LoW/sqlc-go-one-or-fail/releases/download/v$SQLC_GO_ONE_OR_FAIL_VERSION/sqlc-go-one-or-fail_$SQLC_GO_ONE_OR_FAIL_VERSION-1_amd64.rpm

apk:

$ export SQLC_GO_ONE_OR_FAIL_VERSION=X.X.X
$ curl -o sqlc-go-one-or-fail.apk -L https://github.com/k1LoW/sqlc-go-one-or-fail/releases/download/v$SQLC_GO_ONE_OR_FAIL_VERSION/runn_$SQLC_GO_ONE_OR_FAIL_VERSION-1_amd64.apk
$ apk add sqlc-go-one-or-fail.apk

homebrew tap:

$ brew install k1LoW/tap/sqlc-go-one-or-fail

manually:

Download binary from releases page

go install:

$ go install github.com/k1LoW/sqlc-go-one-or-fail@latest

# Packages

Copyright © 2023 Ken'ichiro Oyama <[email protected]> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
No description provided by the author