sqlagent

package module
v1.4.1 Latest Latest
Warning

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

Go to latest
Published: Feb 3, 2019 License: MIT Imports: 18 Imported by: 2

README

Sqlagent

Build Status Godoc

A golang sql wrap with sqlx and squirrel

Create instance with db config

cfg := dsncfg.Database{
    Host:     "localhost",
    Port:     3306,
    Name:     "test",
    Type:     "mysql",
    User:     "admin",
    Password: "passwd",
}
sa, err := NewSqlAgent(cfg)

Init with config file

$ ls
database.json
$ cat database.json
{
	"host":     "localhost",
	"port":     3306,
	"name":     "dbName",
	"type":     "mysql",
	"user":     "user",
	"password": "passwd"
}
InitFromConfig("database.json")

Init with env variable

  • DB_CONFIG set config file path
  • DB_LABEL set config file name pattern: database-$DB_LABEL.[json|yaml|yml]
$ echo $DB_CONFIG
/etc/database.yaml
$ ls /etc/database.yaml
/etc/database.yaml
$ pwd
/data/apps
$ echo $DB_LABEL
prod
$ ls ./config/database*
./config/database-prod.json
InitFromEnv()

Insert

insertBuilder := InsertBuilder(table).
		Columns("name", "uid").
		Values(userName, uid)
_, err := ExecContext(context.TODO(), insertBuilder)

Delete

delBuilder := DeleteBuilder(table).
    Where("name=?", userName)
res, err = ExecContext(context.TODO(), delBuilder)

Update

updateBuilder := UpdateBuilder(table).Where(sq.Eq{"name": oldUserName}).
        Set("name", userName)
res, err := ExecContext(context.TODO(), updateBuilder)

Select

selectBuilder := SelectBuilder("*").From(table).
    Where(sq.Eq{"name": userName})
userRes := []*tableUser{}
err = SelectContext(context.TODO(), selectBuilder, &userRes)

Use raw sqlx.DB

DB().SetMaxIdleConns(2)
DB().SetMaxOpenConns(4)

License

Sqlagent is released under the MIT License.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Close

func Close() error

Close SqlAgent inited by module init method.

func DB

func DB() *sqlx.DB

DB return sqlx.DB held by module SqlAgent.

func DeleteBuilder

func DeleteBuilder(table string) sq.DeleteBuilder

func ExecContext

func ExecContext(ctx context.Context, builder sq.Sqlizer) (sql.Result, error)

ExecContext exec sql built by sq.InsertBuilder/sq.UpdateBuilder/sq.DeleteBuilder and return result. builder: sq.InsertBuilder, sq.UpdateBuilder or sq.DeleteBuilder

func GetContext

func GetContext(ctx context.Context, builder sq.Sqlizer, dest interface{}) error

GetContext get one record by sql built by sq.SelectBuilder and scan to dest. builder: sq.SelectBuilder

func Init

func Init(cfg *dsncfg.Database) error

Init module SqlAgent with database config.

func InitFromConfig

func InitFromConfig(cfgFile string) error

Init module SqlAgent with database config. cfgFile: config file path, support file type [.json | .yaml/.yml], default decoder is json.

func InitFromEnv

func InitFromEnv() error

InitFromEnv use Env variable to detect config file and init SqlAgent with first found config file. Use env "DB_CONFIG" to set config file path. If config file env not set, will find specific file name in a list of dirs. File name format:

If env "DB_LABEL" set, format is "database-$DB_LABEL.[json | yaml/yml]"
Default file name is "database.[json | yaml/yml]"

Search dirs in order:

./ ./config ./../ ./../config ./../../ ./../../config

func InsertBuilder

func InsertBuilder(into string) sq.InsertBuilder

InsertBuilder return squirrel.InsertBuilder for table into into: insert table name

func InsertModelBuilder

func InsertModelBuilder(into string, model interface{}, ignoreColumns ...string) sq.InsertBuilder

func ModelColumns

func ModelColumns(model interface{}, ignoreColumns ...string) []string

ModelColumns use module sqlagent to extract model columns.

func SelectBuilder

func SelectBuilder(columns ...string) sq.SelectBuilder

func SelectContext

func SelectContext(ctx context.Context, builder sq.Sqlizer, dest interface{}) error

SelectContext get one or multi records by sql built by sq.SelectBuilder and scan to dest. builder: sq.SelectBuilder

func SetConnectionConfig

func SetConnectionConfig(cfg dsncfg.ConnectionConfig)

SetConnectionConfig set conenction for module sqlagent.

func SetDBMapper

func SetDBMapper(mapper *reflectx.Mapper)

SetDBMapper set mapper for module sqlagent

func SetUpdateColumns

func SetUpdateColumns(updateBuilder sq.UpdateBuilder, model interface{}, ignoreColumns ...string) sq.UpdateBuilder

func Transaction

func Transaction(ctx context.Context, opt *sql.TxOptions, fn func(tx *sqlx.Tx) error) error

func TxExecContext

func TxExecContext(ctx context.Context, tx *sqlx.Tx, builder sq.Sqlizer) (sql.Result, error)

TxExecContext exec sql built by sq.InsertBuilder/sq.UpdateBuilder/sq.DeleteBuilder and return result. builder: sq.InsertBuilder, sq.UpdateBuilder or sq.DeleteBuilder

func TxGetContext

func TxGetContext(ctx context.Context, tx *sqlx.Tx, builder sq.Sqlizer, dest interface{}) error

TxGetContext get one record by sql built by sq.SelectBuilder and scan to dest. builder: sq.SelectBuilder

func TxSelectContext

func TxSelectContext(ctx context.Context, tx *sqlx.Tx, builder sq.Sqlizer, dest interface{}) error

TxSelectContext get one or multi records by sql built by sq.SelectBuilder and scan to dest. builder: sq.SelectBuilder

func UpdateBuilder

func UpdateBuilder(table string) sq.UpdateBuilder

Types

type SqlAgent

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

func NewSqlAgent

func NewSqlAgent(cfg *dsncfg.Database) (*SqlAgent, error)

func (*SqlAgent) Close

func (a *SqlAgent) Close() error

func (*SqlAgent) DB

func (a *SqlAgent) DB() *sqlx.DB

func (*SqlAgent) DeleteBuilder

func (a *SqlAgent) DeleteBuilder(table string) sq.DeleteBuilder

func (*SqlAgent) ExecContext

func (a *SqlAgent) ExecContext(ctx context.Context, builder sq.Sqlizer) (sql.Result, error)

ExecContext exec sql built by sq.InsertBuilder/sq.UpdateBuilder/sq.DeleteBuilder and return result. builder: sq.InsertBuilder, sq.UpdateBuilder or sq.DeleteBuilder

func (*SqlAgent) GetContext

func (a *SqlAgent) GetContext(ctx context.Context, builder sq.Sqlizer, dest interface{}) error

GetContext get one record by sql built by sq.SelectBuilder and scan to dest. builder: sq.SelectBuilder

func (*SqlAgent) InsertBuilder

func (a *SqlAgent) InsertBuilder(into string) sq.InsertBuilder

InsertBuilder return squirrel.InsertBuilder for table into into: insert table name

func (*SqlAgent) InsertModelBuilder

func (a *SqlAgent) InsertModelBuilder(into string, model interface{}, ignoreColumns ...string) sq.InsertBuilder

InsertModelBuilder use name and value of model feild to build insert sql. ignoreColumns should be the same with column name that is converted by sqlx.DB.Mapper.

func (*SqlAgent) ModelColumns

func (a *SqlAgent) ModelColumns(model interface{}, ignoreColumns ...string) []string

ModelColumns use sqlx.DB.Mapper to extract model table columns name. Columns in ignoreColumns will be ignored. ignoreColumns should be the same with column name that is converted by sqlx.DB.Mapper.

func (*SqlAgent) SelectBuilder

func (a *SqlAgent) SelectBuilder(columns ...string) sq.SelectBuilder

func (*SqlAgent) SelectContext

func (a *SqlAgent) SelectContext(ctx context.Context, builder sq.Sqlizer, dest interface{}) error

SelectContext get one or multi records by sql built by sq.SelectBuilder and scan to dest. builder: sq.SelectBuilder

func (*SqlAgent) SetConnectionConfig

func (a *SqlAgent) SetConnectionConfig(cfg dsncfg.ConnectionConfig)

SetConnectionConfig set connection config to sql.DB.

func (*SqlAgent) SetDBMapper

func (a *SqlAgent) SetDBMapper(mapper *reflectx.Mapper)

SetDBMapper set mapper to sqlx.DB.Mapper. Default mapper use tag `db`, if no tags it will use lower case field name as column name.

func (*SqlAgent) SetUpdateColumns

func (a *SqlAgent) SetUpdateColumns(updateBuilder sq.UpdateBuilder, model interface{}, ignoreColumns ...string) sq.UpdateBuilder

SetUpdateColumns use name and value of model feild to build update sql. ignoreColumns should be the same with column name that is converted by sqlx.DB.Mapper.

func (*SqlAgent) Transaction

func (a *SqlAgent) Transaction(ctx context.Context, opt *sql.TxOptions, fn func(tx *sqlx.Tx) error) error

func (*SqlAgent) UpdateBuilder

func (a *SqlAgent) UpdateBuilder(table string) sq.UpdateBuilder

Jump to

Keyboard shortcuts

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