db

package
v0.0.0-...-a3546ac Latest Latest
Warning

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

Go to latest
Published: Nov 22, 2021 License: MIT Imports: 6 Imported by: 7

README

db 数据库模块

便于序列化为配置的SQL数据库结构

配置文件

#TOML版本,其他版本可以根据对应格式配置
#数据库驱动名
Driver="mysql"
#数据库类型名。一般用于odbc等可以对应多套数据库的驱动。默认和Driver一致
Type="mysql"
#数据库链接字符串,具体值取决于驱动
DataSource=""
#数据库表前缀
Prefix string
#最大连接数量
MaxOpenConns=60
#最大空闲链接数量
MaxIdleConns=30
#按秒计算的连接最长生命周期。默认值为30秒
ConnMaxLifetimeInSecond=60

使用方式

数据库对象
//创建数据库对象
db:=New()
config:=NewConfig()
err:=toml.Unmarshal(data,config)
err=db.Init(config)

//通过数据库表对象操作数据库
sqlresult,err=table.Exec(query, arg1,arg2) 
sqlrows,err=table.Query(query, arg1,arg2) 
sqlrow,err=table.QueryRow(query, arg1,arg2)

//其他维护操作
//获取db
database:=db.DB()
//设置db
db.SetDB(database)
//获取驱动类型
drivertype:=db.Driver()
//设置驱动类型
db.SetDriver("sqlite3")
//获取表名前缀
prefix:=db.Prefix()
//设置表名前缀
db.SetPrefix("prefix")
//根据表前缀生成表名
tablebname:=db.BuildTableName("table)
数据库表对象
//创建数据库表对象
table:=db.Table("tablename")

//通过数据库对象操作数据库
sqlresult,err=db.Exec(query, arg1,arg2) 
sqlrows,err=db.Query(query, arg1,arg2) 
sqlrow,err=db.QueryRow(query, arg1,arg2)

//其他维护操作
//数据库表对象可以使用数据库对象的大部分操作

//设置和获取不带前缀的表名
name:=table.Name()
table.SetName(name)

//获取带前缀的表名
tablename:=table.TableName()

//设置和获取表别名
alias:=table.Alias()
table.SetAlias(alias)

//根据别名生成表的字段名
field:=table.BuildFieldName("field")
数据库事务对象
//创建数据库事务对象。使用后请自行提交或者回退。
txdb:=NewTxDb(db)

//通过事务对象操作数据库
defer txdb.RollBack()
sqlresult,err=table.Exec(query, arg1,arg2) 
sqlrows,err=table.Query(query, arg1,arg2) 
sqlrow,err=table.QueryRow(query, arg1,arg2)
err=txdb.Commit()

Documentation

Index

Constants

View Source
const DefaultConnMaxLifetimeInSecond = int64(30)

DefaultConnMaxLifetimeInSecond default conn max lifetime

Variables

View Source
var DefaultOptimizerFactory = func(loader func(v interface{}) error) (Optimizer, error) {
	if loader == nil {
		return nil, nil
	}
	c := &DefaultOptimizerConfig{}
	err := loader(c)
	if err != nil {
		return nil, err
	}
	if c.Replace == nil {
		return nil, err
	}
	return c.Replace, nil
}
View Source
var ErrSetDriverFromTable = errors.New("herb:sql/db you can't execute set driver method in table interface")

ErrSetDriverFromTable error raised when execute SetDriver method of table .

Functions

func Copy

func Copy(src *PlainDB, dsc *PlainDB)

Copy copy src plain db to dsc plain db

func Factories

func Factories() []string

Factories returns a sorted list of the names of the registered factories.

func Register

func Register(name string, f Factory)

Register makes a driver creator available by the provided name. If Register is called twice with the same name or if driver is nil, it panics.

func UnregisterAll

func UnregisterAll()

UnregisterAll unregister all driver

Types

type Config

type Config struct {
	//Driver sql driver.
	Driver string
	//Type sql database type.
	Type string
	//Conn sql conn string.
	DataSource string
	//Prefix sql table prefix.
	Prefix string
	//MaxIdleConns max idle conns.
	MaxIdleConns int
	//ConnMaxLifetimeInSecond conn max Lifetime in second.
	ConnMaxLifetimeInSecond int64
	//MaxOpenConns max open conns.
	MaxOpenConns int
	Optimizer    func(v interface{}) error `config:", lazyload"`
}

Config database config

func NewConfig

func NewConfig() *Config

NewConfig create new config

func (*Config) ApplyTo

func (c *Config) ApplyTo(d *PlainDB) error

ApplyTo init plain database with config

type Database

type Database interface {
	//SetDB set sqlDB to database interface
	SetDB(db *sql.DB)
	//DB get sql DB of database.
	DB() *sql.DB
	//Driver return database drvier name.
	Driver() string
	//SetDriver set driver name.
	SetDriver(string)
	//BuildTableName return table name with giver table.
	BuildTableName(table string) string
	//Exec exec query with args.
	Exec(query string, args ...interface{}) (sql.Result, error)
	//Query exec query with args .
	//Return rows.
	Query(query string, args ...interface{}) (*sql.Rows, error)
	//QueryRow exec query with args and rows.
	//Return row.
	QueryRow(query string, args ...interface{}) *sql.Row
}

Database database interface

type DefaultOptimizerConfig

type DefaultOptimizerConfig struct {
	Replace *ReplaceOptimizer
}

type Driver

type Driver interface {
	ApplyTo(*PlainDB) error
}

Driver plain db driver

func NewDriver

func NewDriver(name string, c *Config) (Driver, error)

NewDriver create new driver with given name loader. Reutrn driver created and any error if raised.

type Factory

type Factory func(*Config) (Driver, error)

Factory sql db driver create factory.

type Optimizer

type Optimizer interface {
	MustOptimize(cmd string, args []interface{}) (string, []interface{})
}

type OptimizerFactory

type OptimizerFactory func(func(v interface{}) error) (Optimizer, error)

type PlainDB

type PlainDB struct {
	OptimizerFactory OptimizerFactory
	Optimizer        Optimizer
	// contains filtered or unexported fields
}

PlainDB plain database struct.

func New

func New() *PlainDB

New create new plain database.

func (*PlainDB) BuildTableName

func (d *PlainDB) BuildTableName(tableName string) string

BuildTableName return table name with giver table.

func (*PlainDB) DB

func (d *PlainDB) DB() *sql.DB

DB return sql db.

func (*PlainDB) Driver

func (d *PlainDB) Driver() string

Driver return driver name.

func (*PlainDB) Exec

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

Exec exec query with args.

func (*PlainDB) Init

func (d *PlainDB) Init(o PlainDBOption) error

Init init plain database with given option.

func (*PlainDB) Prefix

func (d *PlainDB) Prefix() string

Prefix return table prefix.

func (*PlainDB) Query

func (d *PlainDB) Query(query string, args ...interface{}) (*sql.Rows, error)

Query exec query with args . Return rows.

func (*PlainDB) QueryRow

func (d *PlainDB) QueryRow(query string, args ...interface{}) *sql.Row

QueryRow exec query with args and rows. Return row.

func (*PlainDB) SetDB

func (d *PlainDB) SetDB(db *sql.DB)

SetDB set sql db to plain datatbase.

func (*PlainDB) SetDriver

func (d *PlainDB) SetDriver(driver string)

SetDriver set driver name.

func (*PlainDB) SetPrefix

func (d *PlainDB) SetPrefix(prefix string)

SetPrefix set table prefix.

func (*PlainDB) Table

func (d *PlainDB) Table(tableName string) *PlainTable

Table create plain table with given table name.

type PlainDBOption

type PlainDBOption interface {
	//ApplyTo init plain database.
	ApplyTo(*PlainDB) error
}

PlainDBOption plain database init option interface.

type PlainTable

type PlainTable struct {
	Database
	// contains filtered or unexported fields
}

PlainTable plain table struct

func NewTable

func NewTable(db Database, tableName string) *PlainTable

NewTable create plain table with given database and table name.

func (*PlainTable) Alias

func (t *PlainTable) Alias() string

Alias return table alias.

func (*PlainTable) BuildFieldName

func (t *PlainTable) BuildFieldName(name string) string

BuildFieldName build field name with alias.

func (*PlainTable) Name

func (t *PlainTable) Name() string

Name return plain table name.

func (*PlainTable) SetAlias

func (t *PlainTable) SetAlias(alias string)

SetAlias set table alias.

func (*PlainTable) SetDriver

func (t *PlainTable) SetDriver(driver string)

SetDriver painc if execute SetDriver method of table.

func (*PlainTable) SetName

func (t *PlainTable) SetName(table string)

SetName set plain table name.

func (*PlainTable) TableName

func (t *PlainTable) TableName() string

TableName return table name build with database.

type ReplaceOptimizer

type ReplaceOptimizer map[string]string

func (*ReplaceOptimizer) MustOptimize

func (o *ReplaceOptimizer) MustOptimize(cmd string, args []interface{}) (string, []interface{})

type Table

type Table interface {
	Database
	//BuildFieldName return field name with given field.
	BuildFieldName(field string) string
	//SetAlias set table alias
	SetAlias(string)
	//Alias return table alias
	Alias() string
	//TableName return table name
	TableName() string
}

Table table interface

type TxDB

type TxDB struct {
	Database
	Tx *sql.Tx
}

TxDB database wtih transaction.

func NewTxDB

func NewTxDB(database Database) (*TxDB, error)

NewTxDB create new database wtih transaction by given database.

func (*TxDB) Commit

func (d *TxDB) Commit() error

Commit commits the transaction.

func (*TxDB) Exec

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

Exec exec query with args.

func (*TxDB) Query

func (d *TxDB) Query(query string, args ...interface{}) (*sql.Rows, error)

Query exec query with args . Return rows.

func (*TxDB) QueryRow

func (d *TxDB) QueryRow(query string, args ...interface{}) *sql.Row

QueryRow exec query with args and rows. Return row.

func (*TxDB) Rollback

func (d *TxDB) Rollback() error

Rollback aborts the transaction.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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