# README
db
mysql 基础库,开放有限接口,支持日志、opentracing 和 prometheus 监控。
配置
DB 配置,格式为 DB_${NAME}_DSN,内容参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name
必须设置 parseTime 选项。设置好了就可以通过 ${NAME} 获取 DB 连接池。
时区问题参考 https://www.jianshu.com/p/3f7fc9093db4
示例
import "context"
import "github.com/learninto/goutil/db"
ctx := context.Background()
c := db.Get(ctx, "default")
sql := "insert into foo(id) values(1)"
q := SQLUpdate("foo", sql)
result, err := c.ExecContext(ctx, q)
// 执行 db 事务
err := c.ExecTx(ctx, func(ctx context.Context, tx db.Conn) error {
sql := "insert into foo(id) values(1)"
q := SQLUpdate("foo", sql)
result, err := c.ExecContext(ctx, q)
if err != nil {
return err
}
sql := "insert into foo(id) values(2)"
q := SQLUpdate("foo", sql)
result, err = tx.ExecContext(ctx, q)
if err != nil {
return err
}
return nil
})
# Functions
Get 根据配置名字创建并返回 DB 连接池对象
DB 配置名字格式为 DB_{$name}_DSN DB 配置内容格式请参考 https://github.com/go-sql-driver/mysql#dsn-data-source-name Get 是并发安全的,可以在多协程下使用.
IsDuplicateEntryErr 判断是否为唯一键冲突错误.
IsNoRowsErr 判断是否为 ErrNoRows 错误.
NewRowScanner returns a new instance of the RowScanner.
NotFound returns true if err is a not found error.
Reset 关闭所有 DB 连接 新调用 Get 方法时会使用最新 DB 配置创建连接
如果在配置中开启 HOT_LOAD_DB 开关,则每次下发配置都会重置 DB 连接!.
ScanAll iterates all rows to the end.
ScanOne iterates all rows to the end and makes sure that there was exactly one row otherwise it returns an error.
ScanRow creates a new RowScanner and calls RowScanner.Scan that scans current row data into the destination.
SQLDelete 构造 delete 查询.
SQLInsert 构造 insert 查询.
SQLSelect 构造 select 查询.
SQLUpdate 构造 update 查询.
# Constants
FieldLogicEgt 过滤逻辑 201:>=.
FieldLogicElt 过滤逻辑 301: <=;.
FieldLogicEq 过滤逻辑 100:= ;.
FieldLogicGt 过滤逻辑 200:>;.
FieldLogicIn 过滤逻辑 500: in.
FieldLogicLeftLike 过滤逻辑 1:左 like;.
FieldLogicLike 过滤逻辑 0:like ;.
FieldLogicLt 过滤逻辑 300 <;.
FieldLogicNeq 过滤逻辑 400: <>;.
FieldLogicNotIn 过滤逻辑 500: not in.
FieldLogicRightLike 过滤逻辑 2:右 like;.
FieldTypeDate 日期.
FieldTypeDateTime 日期时间.
FieldTypeInteger 整数.
FieldTypeListMultiple 列表(可多选).
FieldTypeListOne 列表(只能单选).
FieldTypePositiveInteger 正整数(包含0).
FieldTypePositiveRealNumber 正实数(包含0).
FieldTypeRealNumber 实数.
FieldTypeText 文本.
IsMultipleFalse 是否多重应用条件。是指在sql中,该过滤值在多个子查询中需要用到。 0:否;100:是.
IsMultipleTrue 是否多重应用条件。是指在sql中,该过滤值在多个子查询中需要用到。 0:否;100:是.
# Type aliases
TxFunc 事务函数,返回 err 会回滚未提交事务,否则自动提交事务.