glsql

package
v14.1.0 Latest Latest
Warning

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

Go to latest
Published: Jul 21, 2021 License: MIT Imports: 14 Imported by: 0

Documentation

Overview

Package glsql (Gitaly SQL) is a helper package to work with plain SQL queries.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Clean

func Clean() error

Clean removes created schema if any and releases DB connection pool. It needs to be called only once after all tests for package are done. The best place to use it is TestMain(*testing.M) {...} after m.Run().

func GetDBConfig

func GetDBConfig(t testing.TB, database string) config.DB

GetDBConfig returns the database configuration determined by environment variables. See GetDB() for the list of variables.

func Migrate

func Migrate(db *sql.DB, ignoreUnknown bool) (int, error)

Migrate will apply all pending SQL migrations.

func OpenDB

func OpenDB(conf config.DB) (*sql.DB, error)

OpenDB returns connection pool to the database.

func ScanAll

func ScanAll(rows *sql.Rows, in DestProvider) (err error)

ScanAll reads all data from 'rows' into holders provided by 'in'.

Types

type DB

type DB struct {
	*sql.DB
}

DB is a helper struct that should be used only for testing purposes.

func GetDB

func GetDB(t testing.TB, database string) DB

GetDB returns a wrapper around the database connection pool. Must be used only for testing. The new `database` will be re-created for each package that uses this function. Each call will also truncate all tables with their identities restarted if any. The best place to call it is in individual testing functions. It uses env vars:

PGHOST - required, URL/socket/dir
PGPORT - required, binding port
PGUSER - optional, user - `$ whoami` would be used if not provided

func (DB) Close

func (db DB) Close() error

Close removes schema if it was used and releases connection pool.

func (DB) MustExec

func (db DB) MustExec(t testing.TB, q string, args ...interface{})

MustExec executes `q` with `args` and verifies there are no errors.

func (DB) RequireRowsInTable

func (db DB) RequireRowsInTable(t *testing.T, tname string, n int)

RequireRowsInTable verifies that `tname` table has `n` amount of rows in it.

func (DB) Truncate

func (db DB) Truncate(t testing.TB, tables ...string)

Truncate removes all data from the list of tables and restarts identities for them.

func (DB) TruncateAll

func (db DB) TruncateAll(t testing.TB)

TruncateAll removes all data from known set of tables.

type DestProvider

type DestProvider interface {
	// To returns list of pointers.
	// It is not an idempotent operation and each call will return a new list.
	To() []interface{}
}

DestProvider returns list of pointers that will be used to scan values into.

type ListenHandler

type ListenHandler interface {
	// Notification would be triggered once a new notification received.
	Notification(Notification)
	// Disconnect would be triggered once a connection to remote service is lost.
	// Passed in error will never be nil and will contain cause of the disconnection.
	Disconnect(error)
	// Connected would be triggered once a connection to remote service is established.
	Connected()
}

ListenHandler contains a set of methods that would be called on corresponding notifications received.

type MockQuerier

type MockQuerier struct {
	ExecContextFunc  func(context.Context, string, ...interface{}) (sql.Result, error)
	QueryContextFunc func(context.Context, string, ...interface{}) (*sql.Rows, error)
	Querier
}

MockQuerier allows for mocking database operations out.

func (MockQuerier) ExecContext

func (m MockQuerier) ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error)

ExecContext runs the mock's ExecContextFunc.

func (MockQuerier) QueryContext

func (m MockQuerier) QueryContext(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error)

QueryContext runs the mock's QueryContextFunc.

type Notification

type Notification struct {
	// Channel is a name of the receiving channel.
	Channel string
	// Payload is a payload of the notification.
	Payload string
}

Notification represent a notification from the database.

type Querier

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

Querier is an abstraction on *sql.DB and *sql.Tx that allows to use their methods without awareness about actual type.

type StringProvider

type StringProvider []*string

StringProvider allows ScanAll to read all rows and return the result as a slice.

func (*StringProvider) To

func (p *StringProvider) To() []interface{}

To returns a list of pointers that will be used as a destination for scan operation.

func (*StringProvider) Values

func (p *StringProvider) Values() []string

Values returns list of values read from *sql.Rows

type Uint64Provider

type Uint64Provider []*uint64

Uint64Provider allows to use it with ScanAll function to read all rows into it and return result as a slice.

func (*Uint64Provider) To

func (p *Uint64Provider) To() []interface{}

To returns a list of pointers that will be used as a destination for scan operation.

func (*Uint64Provider) Values

func (p *Uint64Provider) Values() []uint64

Values returns list of values read from *sql.Rows

Jump to

Keyboard shortcuts

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