48 lines
847 B
Go
48 lines
847 B
Go
package db
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"database/sql"
|
||
|
|
|
||
|
|
"code.aneur.in/go/record"
|
||
|
|
"github.com/rs/zerolog"
|
||
|
|
)
|
||
|
|
|
||
|
|
type DB struct {
|
||
|
|
Ctx context.Context
|
||
|
|
Log zerolog.Logger
|
||
|
|
SQL *sql.DB
|
||
|
|
}
|
||
|
|
|
||
|
|
func (db *DB) Exec(query string, args ...any) (sql.Result, error) {
|
||
|
|
return db.SQL.ExecContext(db.Ctx, query, args...)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (db *DB) Query(query string, args ...any) ([]record.Record, error) {
|
||
|
|
rows, err := db.SQL.QueryContext(db.Ctx, query, args...)
|
||
|
|
if err != nil {
|
||
|
|
return nil, Err(err)
|
||
|
|
}
|
||
|
|
|
||
|
|
return ScanRecords(rows)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (db *DB) QueryOne(query string, args ...any) (record.Record, error) {
|
||
|
|
rows, err := db.SQL.QueryContext(db.Ctx, query, args...)
|
||
|
|
if err != nil {
|
||
|
|
return nil, Err(err)
|
||
|
|
}
|
||
|
|
|
||
|
|
return ScanOneRecord(rows)
|
||
|
|
}
|
||
|
|
|
||
|
|
func New(ctx context.Context, log zerolog.Logger, sql *sql.DB) *DB {
|
||
|
|
db := &DB{
|
||
|
|
Ctx: ctx,
|
||
|
|
Log: log,
|
||
|
|
SQL: sql,
|
||
|
|
}
|
||
|
|
|
||
|
|
return db
|
||
|
|
}
|