Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type DBResolver ¶
type DBResolver interface { Begin() (*sql.Tx, error) BeginTx(ctx context.Context, opts *sql.TxOptions) (*sql.Tx, error) BeginTxx(ctx context.Context, opts *sql.TxOptions) (*sqlx.Tx, error) Beginx() (*sqlx.Tx, error) BindNamed(query string, arg interface{}) (string, []interface{}, error) Close() error Conn(ctx context.Context) (*sql.Conn, error) Connx(ctx context.Context) (*sqlx.Conn, error) Driver() driver.Driver DriverName() string Exec(query string, args ...interface{}) (sql.Result, error) ExecContext(ctx context.Context, query string, args ...interface{}) (sql.Result, error) Get(dest interface{}, query string, args ...interface{}) error GetContext(ctx context.Context, dest interface{}, query string, args ...interface{}) error MapperFunc(mf func(string) string) MustBegin() *sqlx.Tx MustBeginTx(ctx context.Context, opts *sql.TxOptions) *sqlx.Tx MustExec(query string, args ...interface{}) sql.Result MustExecContext(ctx context.Context, query string, args ...interface{}) sql.Result NamedExec(query string, arg interface{}) (sql.Result, error) NamedExecContext(ctx context.Context, query string, arg interface{}) (sql.Result, error) NamedQuery(query string, arg interface{}) (*sqlx.Rows, error) NamedQueryContext(ctx context.Context, query string, arg interface{}) (*sqlx.Rows, error) Ping() error PingContext(ctx context.Context) error Prepare(query string) (Stmt, error) PrepareContext(ctx context.Context, query string) (Stmt, error) PrepareNamed(query string) (NamedStmt, error) PrepareNamedContext(ctx context.Context, query string) (NamedStmt, error) Preparex(query string) (Stmt, error) PreparexContext(ctx context.Context, query string) (Stmt, error) Query(query string, args ...interface{}) (*sql.Rows, error) QueryContext(ctx context.Context, query string, args ...interface{}) (*sql.Rows, error) QueryRow(query string, args ...interface{}) *sql.Row QueryRowContext(ctx context.Context, query string, args ...interface{}) *sql.Row QueryRowx(query string, args ...interface{}) *sqlx.Row QueryRowxContext(ctx context.Context, query string, args ...interface{}) *sqlx.Row Queryx(query string, args ...interface{}) (*sqlx.Rows, error) QueryxContext(ctx context.Context, query string, args ...interface{}) (*sqlx.Rows, error) Rebind(query string) string Select(dest interface{}, query string, args ...interface{}) error SelectContext(ctx context.Context, dest interface{}, query string, args ...interface{}) error SetConnMaxIdleTime(d time.Duration) SetConnMaxLifetime(d time.Duration) SetMaxIdleConns(n int) SetMaxOpenConns(n int) Stats() sql.DBStats Unsafe() *sqlx.DB }
DBResolver chooses one of databases and then executes a query. This supposed to be aligned with sqlx.DB. Some functions which must select from multiple database are only available for the primary DBResolver or the first primary DBResolver (if using multi-primary). For example, `DriverName()`, `Unsafe()`.
func MustNewDBResolver ¶
func MustNewDBResolver(primaryDBsCfg *PrimaryDBsConfig, opts ...OptionFunc) DBResolver
func NewDBResolver ¶
func NewDBResolver(primaryDBsCfg *PrimaryDBsConfig, opts ...OptionFunc) (DBResolver, error)
NewDBResolver creates a new DBResolver and returns it. If no primary DBResolver is given, it returns an error. If you do not give WriteOnly option, it will use the primary DBResolver as the read DBResolver. if you do not give LoadBalancer option, it will use the RandomLoadBalancer.
type LoadBalancer ¶
type LoadBalancer interface { // Select returns the database to use for the given operation. Select(ctx context.Context, dbs []*sqlx.DB) *sqlx.DB }
LoadBalancer chooses a database from the given databases.
type NamedStmt ¶
type NamedStmt interface { Close() error Exec(arg interface{}) (sql.Result, error) ExecContext(ctx context.Context, arg interface{}) (sql.Result, error) Get(dest interface{}, arg interface{}) error GetContext(ctx context.Context, dest interface{}, arg interface{}) error MustExec(arg interface{}) sql.Result MustExecContext(ctx context.Context, arg interface{}) sql.Result Query(arg interface{}) (*sql.Rows, error) QueryContext(ctx context.Context, arg interface{}) (*sql.Rows, error) QueryRow(arg interface{}) *sqlx.Row QueryRowContext(ctx context.Context, arg interface{}) *sqlx.Row QueryRowx(arg interface{}) *sqlx.Row QueryRowxContext(ctx context.Context, arg interface{}) *sqlx.Row Queryx(arg interface{}) (*sqlx.Rows, error) QueryxContext(ctx context.Context, arg interface{}) (*sqlx.Rows, error) Select(dest interface{}, arg interface{}) error SelectContext(ctx context.Context, dest interface{}, arg interface{}) error Unsafe() *sqlx.NamedStmt }
NamedStmt is a wrapper around sqlx.NamedStmt.
type OptionFunc ¶
type OptionFunc func(*Options)
OptionFunc is a function that configures a Options.
func WithLoadBalancer ¶
func WithLoadBalancer(loadBalancer LoadBalancer) OptionFunc
WithLoadBalancer sets the load balancer.
func WithSecondaryDBs ¶
func WithSecondaryDBs(dbs ...*sqlx.DB) OptionFunc
WithSecondaryDBs sets the secondary databases.
type Options ¶
type Options struct { SecondaryDBs []*sqlx.DB LoadBalancer LoadBalancer }
Options is the config for dbResolver.
type PrimaryDBsConfig ¶
type PrimaryDBsConfig struct { DBs []*sqlx.DB ReadWritePolicy ReadWritePolicy }
PrimaryDBsConfig is the config of primary databases.
func NewPrimaryDBsConfig ¶
func NewPrimaryDBsConfig(dbs []*sqlx.DB, policy ReadWritePolicy) *PrimaryDBsConfig
NewPrimaryDBsConfig creates a new PrimaryDBsConfig and returns it.
type RandomLoadBalancer ¶
type RandomLoadBalancer struct{}
RandomLoadBalancer is a load balancer that chooses a database randomly.
func NewRandomLoadBalancer ¶
func NewRandomLoadBalancer() *RandomLoadBalancer
type ReadWritePolicy ¶
type ReadWritePolicy string
ReadWritePolicy is the read/write policy for the primary databases.
const ( ReadWrite ReadWritePolicy = "read-write" WriteOnly ReadWritePolicy = "write-only" )
ReadWritePolicies.
type Stmt ¶
type Stmt interface { Close() error Exec(args ...interface{}) (sql.Result, error) ExecContext(ctx context.Context, args ...interface{}) (sql.Result, error) Get(dest interface{}, args ...interface{}) error GetContext(ctx context.Context, dest interface{}, args ...interface{}) error MustExec(args ...interface{}) sql.Result MustExecContext(ctx context.Context, args ...interface{}) sql.Result Query(args ...interface{}) (*sql.Rows, error) QueryContext(ctx context.Context, args ...interface{}) (*sql.Rows, error) QueryRow(args ...interface{}) *sql.Row QueryRowContext(ctx context.Context, args ...interface{}) *sql.Row QueryRowx(args ...interface{}) *sqlx.Row QueryRowxContext(ctx context.Context, args ...interface{}) *sqlx.Row Queryx(args ...interface{}) (*sqlx.Rows, error) QueryxContext(ctx context.Context, args ...interface{}) (*sqlx.Rows, error) Select(dest interface{}, args ...interface{}) error SelectContext(ctx context.Context, dest interface{}, args ...interface{}) error Unsafe() *sqlx.Stmt }
Stmt is a wrapper around sqlx.Stmt.