dbutil

package
v0.15.2 Latest Latest
Warning

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

Go to latest
Published: May 16, 2023 License: MPL-2.0 Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ContextKeyDatabaseTransaction contextKey = iota
	ContextKeyDoTxnCallerSkip
)

Variables

View Source
var (
	ErrTxn       = errors.New("transaction")
	ErrTxnBegin  = fmt.Errorf("%w: begin", ErrTxn)
	ErrTxnCommit = fmt.Errorf("%w: commit", ErrTxn)
)
View Source
var ErrForeignTables = errors.New("the database contains foreign tables")
View Source
var ErrNotOwned = errors.New("the database is owned by")
View Source
var ErrUnsupportedDatabaseVersion = errors.New("unsupported database schema version")
View Source
var ErrUnsupportedDialect = errors.New("unsupported database dialect")

Functions

This section is empty.

Types

type Config added in v0.15.0

type Config struct {
	Type string `yaml:"type"`
	URI  string `yaml:"uri"`

	MaxOpenConns int `yaml:"max_open_conns"`
	MaxIdleConns int `yaml:"max_idle_conns"`

	ConnMaxIdleTime string `yaml:"conn_max_idle_time"`
	ConnMaxLifetime string `yaml:"conn_max_lifetime"`
}

type ContextExecable

type ContextExecable interface {
	ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error)
	QueryContext(ctx context.Context, query string, args ...interface{}) (Rows, error)
	QueryRowContext(ctx context.Context, query string, args ...interface{}) *sql.Row
}

type Database

type Database struct {
	RawDB        *sql.DB
	Owner        string
	VersionTable string
	Log          DatabaseLogger
	Dialect      Dialect
	UpgradeTable UpgradeTable

	IgnoreForeignTables       bool
	IgnoreUnsupportedDatabase bool
	// contains filtered or unexported fields
}

func NewFromConfig

func NewFromConfig(owner string, cfg Config, logger DatabaseLogger) (*Database, error)

func NewWithDB

func NewWithDB(db *sql.DB, rawDialect string) (*Database, error)

func NewWithDialect

func NewWithDialect(uri, rawDialect string) (*Database, error)

func (*Database) Begin

func (ld *Database) Begin() (*LoggingTxn, error)

func (*Database) BeginTx

func (ld *Database) BeginTx(ctx context.Context, opts *sql.TxOptions) (*LoggingTxn, error)

func (*Database) Child

func (db *Database) Child(versionTable string, upgradeTable UpgradeTable, log DatabaseLogger) *Database

func (*Database) ColumnExists added in v0.15.2

func (db *Database) ColumnExists(tx Execable, table, column string) (exists bool, err error)

func (*Database) Configure

func (db *Database) Configure(cfg Config) error

func (*Database) DoTxn added in v0.15.2

func (db *Database) DoTxn(ctx context.Context, opts *sql.TxOptions, fn func(ctx context.Context) error) error

func (*Database) TableExists added in v0.15.1

func (db *Database) TableExists(tx Execable, table string) (exists bool, err error)

func (*Database) Upgrade

func (db *Database) Upgrade() error

type DatabaseLogger

type DatabaseLogger interface {
	QueryTiming(ctx context.Context, method, query string, args []interface{}, nrows int, duration time.Duration, err error)
	WarnUnsupportedVersion(current, compat, latest int)
	PrepareUpgrade(current, compat, latest int)
	DoUpgrade(from, to int, message string, txn bool)
	// Deprecated: legacy warning method, return errors instead
	Warn(msg string, args ...interface{})
}
var NoopLogger DatabaseLogger = &noopLogger{}

func MauLogger deprecated

func MauLogger(log maulogger.Logger) DatabaseLogger

Deprecated: Use zerolog instead

func ZeroLogger

func ZeroLogger(log zerolog.Logger, cfg ...ZeroLogSettings) DatabaseLogger

func ZeroLoggerPtr

func ZeroLoggerPtr(log *zerolog.Logger, cfg ...ZeroLogSettings) DatabaseLogger

type Dialect

type Dialect int
const (
	DialectUnknown Dialect = iota
	Postgres
	SQLite
)

func ParseDialect

func ParseDialect(engine string) (Dialect, error)

func (Dialect) String

func (dialect Dialect) String() string

type Execable

type Execable interface {
	ContextExecable
	Exec(query string, args ...interface{}) (sql.Result, error)
	Query(query string, args ...interface{}) (Rows, error)
	QueryRow(query string, args ...interface{}) *sql.Row
}

type LoggingExecable

type LoggingExecable struct {
	UnderlyingExecable UnderlyingExecable
	// contains filtered or unexported fields
}

LoggingExecable is a wrapper for anything with database Exec methods (i.e. sql.Conn, sql.DB and sql.Tx) that can preprocess queries (e.g. replacing $ with ? on SQLite) and log query durations.

func (*LoggingExecable) Exec

func (le *LoggingExecable) Exec(query string, args ...interface{}) (sql.Result, error)

func (*LoggingExecable) ExecContext

func (le *LoggingExecable) ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error)

func (*LoggingExecable) Query

func (le *LoggingExecable) Query(query string, args ...interface{}) (Rows, error)

func (*LoggingExecable) QueryContext

func (le *LoggingExecable) QueryContext(ctx context.Context, query string, args ...interface{}) (Rows, error)

func (*LoggingExecable) QueryRow

func (le *LoggingExecable) QueryRow(query string, args ...interface{}) *sql.Row

func (*LoggingExecable) QueryRowContext

func (le *LoggingExecable) QueryRowContext(ctx context.Context, query string, args ...interface{}) *sql.Row

type LoggingRows added in v0.12.3

type LoggingRows struct {
	// contains filtered or unexported fields
}

func (*LoggingRows) Close added in v0.12.3

func (lrs *LoggingRows) Close() error

func (*LoggingRows) ColumnTypes added in v0.12.3

func (lrs *LoggingRows) ColumnTypes() ([]*sql.ColumnType, error)

func (*LoggingRows) Columns added in v0.12.3

func (lrs *LoggingRows) Columns() ([]string, error)

func (*LoggingRows) Err added in v0.12.3

func (lrs *LoggingRows) Err() error

func (*LoggingRows) Next added in v0.12.3

func (lrs *LoggingRows) Next() bool

func (*LoggingRows) NextResultSet added in v0.12.3

func (lrs *LoggingRows) NextResultSet() bool

func (*LoggingRows) Scan added in v0.12.3

func (lrs *LoggingRows) Scan(dest ...any) error

type LoggingTxn

type LoggingTxn struct {
	LoggingExecable
	UnderlyingTx *sql.Tx

	StartTime time.Time
	EndTime   time.Time
	// contains filtered or unexported fields
}

func (*LoggingTxn) Commit

func (lt *LoggingTxn) Commit() error

func (*LoggingTxn) Rollback

func (lt *LoggingTxn) Rollback() error

type Rows added in v0.12.3

type Rows interface {
	Close() error
	ColumnTypes() ([]*sql.ColumnType, error)
	Columns() ([]string, error)
	Err() error
	Next() bool
	NextResultSet() bool
	Scan(...any) error
}

type Scannable

type Scannable interface {
	Scan(...interface{}) error
}

type Transaction

type Transaction interface {
	Execable
	Commit() error
	Rollback() error
}

type UnderlyingContextExecable added in v0.12.3

type UnderlyingContextExecable interface {
	ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error)
	QueryContext(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)
	QueryRowContext(ctx context.Context, query string, args ...interface{}) *sql.Row
}

type UnderlyingExecable added in v0.12.3

type UnderlyingExecable interface {
	UnderlyingContextExecable
	Exec(query string, args ...interface{}) (sql.Result, error)
	Query(query string, args ...interface{}) (*sql.Rows, error)
	QueryRow(query string, args ...interface{}) *sql.Row
}

type UpgradeTable

type UpgradeTable []upgrade

func (*UpgradeTable) Register

func (ut *UpgradeTable) Register(from, to, compat int, message string, txn bool, fn upgradeFunc)

func (*UpgradeTable) RegisterFS

func (ut *UpgradeTable) RegisterFS(fs fullFS)

func (*UpgradeTable) RegisterFSPath

func (ut *UpgradeTable) RegisterFSPath(fs fullFS, dir string)

type ZeroLogSettings added in v0.15.2

type ZeroLogSettings struct {
	CallerSkipFrame int
	Caller          bool
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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