* fix database interfaces * add queries * fix queries * fix linters * add owner to imported go library * remove unused funcs * run go work sync * improve critical section fix in data race fix * fix linters * remove sync * fix typo * improve data embedding * fix linters * fix migration * remove unnecessary comments * fix linters * improve SQL templates readability * remove group_version from kind_version for consistency in History method * add created_at and updated_at columns to kind_version table
60 lines
1.0 KiB
Go
60 lines
1.0 KiB
Go
package dbimpl
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"fmt"
|
|
|
|
entitydb "github.com/grafana/grafana/pkg/services/store/entity/db"
|
|
)
|
|
|
|
func NewDB(d *sql.DB, driverName string) entitydb.DB {
|
|
return sqldb{
|
|
DB: d,
|
|
driverName: driverName,
|
|
}
|
|
}
|
|
|
|
type sqldb struct {
|
|
*sql.DB
|
|
driverName string
|
|
}
|
|
|
|
func (d sqldb) DriverName() string {
|
|
return d.driverName
|
|
}
|
|
|
|
func (d sqldb) BeginTx(ctx context.Context, opts *sql.TxOptions) (entitydb.Tx, error) {
|
|
t, err := d.DB.BeginTx(ctx, opts)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return tx{
|
|
Tx: t,
|
|
}, nil
|
|
}
|
|
|
|
func (d sqldb) WithTx(ctx context.Context, opts *sql.TxOptions, f entitydb.TxFunc) error {
|
|
t, err := d.BeginTx(ctx, opts)
|
|
if err != nil {
|
|
return fmt.Errorf("begin tx: %w", err)
|
|
}
|
|
|
|
if err := f(ctx, t); err != nil {
|
|
if rollbackErr := t.Rollback(); rollbackErr != nil {
|
|
return fmt.Errorf("tx err: %w; rollback err: %w", err, rollbackErr)
|
|
}
|
|
return fmt.Errorf("tx err: %w", err)
|
|
}
|
|
|
|
if err = t.Commit(); err != nil {
|
|
return fmt.Errorf("commit err: %w", err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
type tx struct {
|
|
*sql.Tx
|
|
}
|