db

package
v0.40.0 Latest Latest
Warning

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

Go to latest
Published: Mar 13, 2025 License: MIT Imports: 40 Imported by: 0

Documentation

Index

Constants

View Source
const DriverMysql = "mysql"
View Source
const DriverNameCrateDb = "cratedb"
View Source
const DriverNameRedshift = "redshift"
View Source
const (
	FormatDateTime = "2006-01-02 15:04:05"
)
View Source
const MetadataKey = "db.connections"

Variables

View Source
var (
	ErrJSONInvalidType   = errors.New("incoming data type is not []byte for json")
	NullableBehaviour    = Nullable{}
	NonNullableBehaviour = NonNullable{}
)

Functions

func AddDriverFactory added in v0.27.0

func AddDriverFactory(name string, factory DriverFactory)

func AddMigrationProvider added in v0.18.0

func AddMigrationProvider(name string, provider MigrationProvider)

func CheckBadConnection added in v0.20.0

func CheckBadConnection(result any, err error) exec.ErrorType

func CheckInvalidConnection added in v0.20.0

func CheckInvalidConnection(result any, err error) exec.ErrorType

func CheckIoTimeout added in v0.20.0

func CheckIoTimeout(result any, err error) exec.ErrorType

func ExecutorBackoffType added in v0.38.1

func ExecutorBackoffType(name string) string

func IsDuplicateEntryError

func IsDuplicateEntryError(err error) bool

func MysqlPlainFixtureSetFactory added in v0.37.0

func MysqlPlainFixtureSetFactory[T any](metadata *MysqlPlainMetaData, data fixtures.NamedFixtures[T], options ...fixtures.FixtureSetOption) fixtures.FixtureSetFactory

func MysqlSqlxFixtureSetFactory added in v0.37.0

func MysqlSqlxFixtureSetFactory[T any](metadata *MysqlSqlxMetaData, data fixtures.NamedFixtures[T], options ...fixtures.FixtureSetOption) fixtures.FixtureSetFactory

func NewConnection added in v0.20.0

func NewConnection(ctx context.Context, config cfg.Config, logger log.Logger, name string) (*sqlx.DB, error)

func NewConnectionFromSettings

func NewConnectionFromSettings(ctx context.Context, logger log.Logger, name string, settings *Settings) (*sqlx.DB, error)

func NewConnectionWithInterfaces

func NewConnectionWithInterfaces(logger log.Logger, settings *Settings) (*sqlx.DB, error)

func NewDataImporter added in v0.36.1

func NewDataImporter(ctx context.Context, config cfg.Config, logger log.Logger, name string) (*dataImporter, error)

func NewExecutor added in v0.20.0

func NewExecutor(config cfg.Config, logger log.Logger, name string, backoffType string, notifier ...exec.Notify) exec.Executor

func NewExecutorWithChecker added in v0.38.1

func NewExecutorWithChecker(config cfg.Config, logger log.Logger, name string, backoffType string, checker []exec.ErrorChecker, notifier []exec.Notify) exec.Executor

func NewLifecycleManager added in v0.37.0

func NewLifecycleManager(name string, settings *Settings) reslife.LifeCycleerFactory

func NewMysqlPlainFixtureWriter added in v0.37.0

func NewMysqlPlainFixtureWriter(ctx context.Context, config cfg.Config, logger log.Logger, metadata *MysqlPlainMetaData) (fixtures.FixtureWriter, error)

func NewMysqlPlainFixtureWriterWithInterfaces added in v0.37.0

func NewMysqlPlainFixtureWriterWithInterfaces(logger log.Logger, client Client, metadata *MysqlPlainMetaData) fixtures.FixtureWriter

func NewMysqlSqlxFixtureWriter added in v0.37.0

func NewMysqlSqlxFixtureWriter(ctx context.Context, config cfg.Config, logger log.Logger, metadata *MysqlSqlxMetaData) (fixtures.FixtureWriter, error)

func NewMysqlSqlxFixtureWriterWithInterfaces added in v0.37.0

func NewMysqlSqlxFixtureWriterWithInterfaces(logger log.Logger, client Client, metadata *MysqlSqlxMetaData) fixtures.FixtureWriter

func ProvideConnection

func ProvideConnection(ctx context.Context, config cfg.Config, logger log.Logger, name string) (*sqlx.DB, error)

func ProvideConnectionFromSettings added in v0.26.0

func ProvideConnectionFromSettings(ctx context.Context, logger log.Logger, name string, settings *Settings) (*sqlx.DB, error)

Types

type Client

type Client interface {
	GetSingleScalarValue(ctx context.Context, query string, args ...any) (int, error)
	GetResult(ctx context.Context, query string, args ...any) (*Result, error)
	Exec(ctx context.Context, query string, args ...any) (sql.Result, error)
	NamedExec(ctx context.Context, query string, arg any) (sql.Result, error)
	ExecMultiInTx(ctx context.Context, sqlers ...Sqler) (results []sql.Result, err error)
	BindNamed(query string, arg any) (string, []any, error)
	Prepare(ctx context.Context, query string) (*sql.Stmt, error)
	Preparex(ctx context.Context, query string) (*sqlx.Stmt, error)
	PrepareNamed(ctx context.Context, query string) (*sqlx.NamedStmt, error)
	Query(ctx context.Context, query string, args ...any) (*sql.Rows, error)
	Queryx(ctx context.Context, query string, args ...any) (*sqlx.Rows, error)
	QueryRow(ctx context.Context, query string, args ...any) *sql.Row
	NamedQuery(ctx context.Context, query string, arg any) (*sqlx.Rows, error)
	Select(ctx context.Context, dest any, query string, args ...any) error
	NamedSelect(ctx context.Context, dest any, query string, arg any) error
	Get(ctx context.Context, dest any, query string, args ...any) error
	WithTx(ctx context.Context, ops *sql.TxOptions, do func(ctx context.Context, tx *sqlx.Tx) error) error
	Close() error
}

type ClientOption added in v0.38.1

type ClientOption func(*ClientSqlx)

func ClientWithExecutor added in v0.38.1

func ClientWithExecutor(executor exec.Executor) ClientOption

type ClientSqlx

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

func NewClient

func NewClient(ctx context.Context, config cfg.Config, logger log.Logger, name string, options ...ClientOption) (*ClientSqlx, error)

func NewClientWithInterfaces

func NewClientWithInterfaces(logger log.Logger, connection *sqlx.DB, executor exec.Executor) *ClientSqlx

func NewClientWithSettings

func NewClientWithSettings(ctx context.Context, config cfg.Config, logger log.Logger, name string, settings *Settings, options ...ClientOption) (*ClientSqlx, error)

func ProvideClient added in v0.20.0

func ProvideClient(ctx context.Context, config cfg.Config, logger log.Logger, name string, options ...ClientOption) (*ClientSqlx, error)

ProvideClient provides a client from context.. Applies the options on creation of a new client if none is registered in the context yet for the name. When requesting a client with the same name but different options the options will not be applied but the already registered client will be returned.

func (*ClientSqlx) BeginTx

func (c *ClientSqlx) BeginTx(ctx context.Context, ops *sql.TxOptions) (*sqlx.Tx, error)

func (*ClientSqlx) BindNamed added in v0.20.1

func (c *ClientSqlx) BindNamed(query string, arg any) (qry string, args []any, err error)

func (*ClientSqlx) Close added in v0.36.1

func (c *ClientSqlx) Close() error

func (*ClientSqlx) Exec

func (c *ClientSqlx) Exec(ctx context.Context, query string, args ...any) (sql.Result, error)

func (*ClientSqlx) ExecMultiInTx added in v0.19.4

func (c *ClientSqlx) ExecMultiInTx(ctx context.Context, sqlers ...Sqler) (results []sql.Result, err error)

func (*ClientSqlx) Get

func (c *ClientSqlx) Get(ctx context.Context, dest any, query string, args ...any) error

func (*ClientSqlx) GetResult

func (c *ClientSqlx) GetResult(ctx context.Context, query string, args ...any) (result *Result, err error)

func (*ClientSqlx) GetSingleScalarValue

func (c *ClientSqlx) GetSingleScalarValue(ctx context.Context, query string, args ...any) (int, error)

func (*ClientSqlx) NamedExec added in v0.20.1

func (c *ClientSqlx) NamedExec(ctx context.Context, query string, arg any) (sql.Result, error)

func (*ClientSqlx) NamedQuery added in v0.20.1

func (c *ClientSqlx) NamedQuery(ctx context.Context, query string, arg any) (*sqlx.Rows, error)

func (*ClientSqlx) NamedSelect added in v0.20.1

func (c *ClientSqlx) NamedSelect(ctx context.Context, dest any, query string, arg any) error

func (*ClientSqlx) Prepare

func (c *ClientSqlx) Prepare(ctx context.Context, query string) (*sql.Stmt, error)

func (*ClientSqlx) PrepareNamed added in v0.20.1

func (c *ClientSqlx) PrepareNamed(ctx context.Context, query string) (*sqlx.NamedStmt, error)

func (*ClientSqlx) Preparex added in v0.20.0

func (c *ClientSqlx) Preparex(ctx context.Context, query string) (*sqlx.Stmt, error)

func (*ClientSqlx) Query

func (c *ClientSqlx) Query(ctx context.Context, query string, args ...any) (*sql.Rows, error)

func (*ClientSqlx) QueryRow

func (c *ClientSqlx) QueryRow(ctx context.Context, query string, args ...any) *sql.Row

func (*ClientSqlx) Queryx

func (c *ClientSqlx) Queryx(ctx context.Context, query string, args ...any) (*sqlx.Rows, error)

func (*ClientSqlx) Select

func (c *ClientSqlx) Select(ctx context.Context, dest any, query string, args ...any) error

func (*ClientSqlx) WithTx

func (c *ClientSqlx) WithTx(ctx context.Context, ops *sql.TxOptions, do func(ctx context.Context, tx *sqlx.Tx) error) error

type DataExporter added in v0.36.1

type DataExporter interface {
	ExportAllTables(ctx context.Context, dbName string) (DatabaseData, error)
	ExportTable(ctx context.Context, dbName string, tableName string) ([]map[string]any, error)
	Close() error
}

func NewDataExporter added in v0.36.1

func NewDataExporter(ctx context.Context, config cfg.Config, logger log.Logger) (DataExporter, error)

func ProvideDataExporter added in v0.36.1

func ProvideDataExporter(ctx context.Context, config cfg.Config, logger log.Logger) (DataExporter, error)

type DataImporter added in v0.36.1

type DataImporter interface {
	ImportDatabase(ctx context.Context, database string, data DatabaseData) (int, error)
}

type DatabaseData added in v0.36.1

type DatabaseData map[string]TableData

DatabaseData example data:

map[string][]map[string]any{
  "users": {
    {
      "username": "alice",
    },
  },
}

type Driver added in v0.19.4

type Driver interface {
	GetDSN(settings *Settings) string
	GetMigrationDriver(db *sql.DB, database string, migrationsTable string) (database.Driver, error)
}

func GetDriver added in v0.19.4

func GetDriver(logger log.Logger, driverName string) (Driver, error)

func NewCrateDbDriver added in v0.19.4

func NewCrateDbDriver(logger log.Logger) (Driver, error)

func NewMysqlDriver added in v0.19.4

func NewMysqlDriver(logger log.Logger) (Driver, error)

func NewRedshiftDriver added in v0.19.4

func NewRedshiftDriver(logger log.Logger) (Driver, error)

type DriverFactory

type DriverFactory func(logger log.Logger) (Driver, error)

type DuplicateEntryError

type DuplicateEntryError struct {
	Err error
}

func (*DuplicateEntryError) As

func (e *DuplicateEntryError) As(target interface{}) bool

func (*DuplicateEntryError) Error

func (e *DuplicateEntryError) Error() string

func (*DuplicateEntryError) Is

func (e *DuplicateEntryError) Is(err error) bool

func (*DuplicateEntryError) Unwrap

func (e *DuplicateEntryError) Unwrap() error

type IsNullable added in v0.21.1

type IsNullable interface {
	IsNullable() bool
}

type JSON added in v0.21.1

type JSON[T any, NullBehaviour Nullable | NonNullable] struct {
	// contains filtered or unexported fields
}

JSON is a type wrapping other types for easy use of database json columns. It is intended to be used without a pointer but having pointers to T.

func NewJSON added in v0.21.1

func NewJSON[T any, NullBehaviour Nullable | NonNullable](val T, _ NullBehaviour) JSON[T, NullBehaviour]

func (JSON[T, NullBehaviour]) Get added in v0.21.1

func (t JSON[T, NullBehaviour]) Get() T

func (*JSON[T, NullBehaviour]) Scan added in v0.21.1

func (t *JSON[T, NullBehaviour]) Scan(src any) error

func (JSON[T, NullBehaviour]) Value added in v0.21.1

func (t JSON[T, NullBehaviour]) Value() (driver.Value, error)

type LifeCyclePurger added in v0.38.3

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

func NewLifeCyclePurger added in v0.38.3

func NewLifeCyclePurger(config cfg.Config, logger log.Logger, connectionName string) (*LifeCyclePurger, error)

func NewLifeCyclePurgerWithSettings added in v0.38.3

func NewLifeCyclePurgerWithSettings(logger log.Logger, settings *Settings) (*LifeCyclePurger, error)

func (LifeCyclePurger) Purge added in v0.38.3

func (p LifeCyclePurger) Purge(ctx context.Context) (err error)

type LifecycleManager added in v0.37.0

type LifecycleManager interface {
	reslife.LifeCycleer
	reslife.Registerer
	reslife.Purger
}

type Metadata added in v0.38.3

type Metadata struct {
	Name     string `json:"name"`
	Host     string `json:"host"`
	Port     int    `json:"port"`
	Database string `json:"database"`
}

type MigrationProvider added in v0.18.0

type MigrationProvider func(logger log.Logger, settings *Settings, db *sql.DB) error

type MigrationSettings

type MigrationSettings struct {
	Application    string `cfg:"application" default:"{app_name}"`
	Enabled        bool   `cfg:"enabled" default:"false"`
	Reset          bool   `cfg:"reset" default:"false"`
	Path           string `cfg:"path"`
	PrefixedTables bool   `cfg:"prefixed_tables" default:"false"`
	Provider       string `cfg:"provider" default:"goose"`
}

type MysqlPlainFixtureValues added in v0.37.0

type MysqlPlainFixtureValues []any

type MysqlPlainMetaData added in v0.37.0

type MysqlPlainMetaData struct {
	TableName string
	Columns   []string
}

type MysqlSqlxMetaData added in v0.37.0

type MysqlSqlxMetaData struct {
	TableName string
}

type NonNullable added in v0.21.1

type NonNullable struct{}

func (NonNullable) IsNullable added in v0.21.1

func (n NonNullable) IsNullable() bool

type Nullable added in v0.21.1

type Nullable struct{}

func (Nullable) IsNullable added in v0.21.1

func (n Nullable) IsNullable() bool

type QueryBuilder

type QueryBuilder interface {
	Table(table string) QueryBuilder
	Joins(joins []string) QueryBuilder
	Where(query interface{}, args ...interface{}) QueryBuilder
	GroupBy(field ...string) QueryBuilder
	OrderBy(field string, direction string) QueryBuilder
	Page(offset int, size int) QueryBuilder
}

type RawQueryBuilder

type RawQueryBuilder struct {
	Builder squirrel.SelectBuilder
}

func NewQueryBuilder

func NewQueryBuilder() *RawQueryBuilder

func (*RawQueryBuilder) GroupBy

func (b *RawQueryBuilder) GroupBy(field ...string) QueryBuilder

func (*RawQueryBuilder) Joins

func (b *RawQueryBuilder) Joins(joins []string) QueryBuilder

func (*RawQueryBuilder) OrderBy

func (b *RawQueryBuilder) OrderBy(field string, direction string) QueryBuilder

func (*RawQueryBuilder) Page

func (b *RawQueryBuilder) Page(offset int, size int) QueryBuilder

func (*RawQueryBuilder) Table

func (b *RawQueryBuilder) Table(table string) QueryBuilder

func (*RawQueryBuilder) Where

func (b *RawQueryBuilder) Where(query interface{}, args ...interface{}) QueryBuilder

type Result

type Result []ResultRow

type ResultRow

type ResultRow map[string]string

type Settings

type Settings struct {
	Charset               string            `cfg:"charset" default:"utf8mb4"`
	Collation             string            `cfg:"collation" default:"utf8mb4_general_ci"`
	ConnectionMaxIdleTime time.Duration     `cfg:"connection_max_idletime" default:"120s"`
	ConnectionMaxLifetime time.Duration     `cfg:"connection_max_lifetime" default:"120s"`
	Driver                string            `cfg:"driver"`
	MaxIdleConnections    int               `cfg:"max_idle_connections" default:"2"` // 0 or negative number=no idle connections, sql driver default=2
	MaxOpenConnections    int               `cfg:"max_open_connections" default:"0"` // 0 or negative number=unlimited, sql driver default=0
	Migrations            MigrationSettings `cfg:"migrations"`
	MultiStatements       bool              `cfg:"multi_statements" default:"true"`
	Parameters            map[string]string `cfg:"parameters"`
	ParseTime             bool              `cfg:"parse_time" default:"true"`
	Retry                 SettingsRetry     `cfg:"retry"`
	Timeouts              SettingsTimeout   `cfg:"timeouts"`
	Uri                   SettingsUri       `cfg:"uri"`
}

func ReadSettings added in v0.37.0

func ReadSettings(config cfg.Config, name string) (*Settings, error)

type SettingsRetry added in v0.20.0

type SettingsRetry struct {
	Enabled bool `cfg:"enabled" default:"false"`
}

type SettingsTimeout added in v0.19.4

type SettingsTimeout struct {
	ReadTimeout  time.Duration `cfg:"readTimeout" default:"0"`  // I/O read timeout. The value must be a decimal number with a unit suffix ("ms", "s", "m", "h"), such as "30s", "0.5m" or "1m30s".
	WriteTimeout time.Duration `cfg:"writeTimeout" default:"0"` // I/O write timeout. The value must be a decimal number with a unit suffix ("ms", "s", "m", "h"), such as "30s", "0.5m" or "1m30s".
	Timeout      time.Duration `cfg:"timeout" default:"0"`      // Timeout for establishing connections, aka dial timeout. The value must be a decimal number with a unit suffix ("ms", "s", "m", "h"), such as "30s", "0.5m" or "1m30s".
}

type SettingsUri added in v0.37.0

type SettingsUri struct {
	Host     string `cfg:"host" default:"localhost" validation:"required"`
	Port     int    `cfg:"port" default:"3306" validation:"required"`
	User     string `cfg:"user" validation:"required"`
	Password string `cfg:"password" validation:"required"`
	Database string `cfg:"database" validation:"required"`
}

type SqlResult

type SqlResult interface {
	LastInsertId() (int64, error)
	RowsAffected() (int64, error)
}

type Sqler added in v0.19.4

type Sqler interface {
	ToSql() (string, []any, error)
}

func SqlFmt added in v0.19.4

func SqlFmt(format string, formatValues []any, args ...any) Sqler

type TableData added in v0.36.1

type TableData []map[string]any

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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